Skip to content

sigma-andex/purescript-morello

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

74 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

purescript-morello ๐ŸŒธ

A purescript library for cherry-picking ๐Ÿ’ your data.

Ehh, wat ?

Morello is a library for making data transformation and validation super simple.

tl;dr

Transform & validate your input data in a declarative way.

import Morello.Morello

-- Given an input model...
type PersonInput = { profession :: { title :: String, salary :: Number } }

-- ...and an output model...
type PersonOutput = { details :: { title :: Title, salary :: Salary, jobType :: JobType } }

-- ...write some validators...
validateTitle :: Validate String Title
validateTitle "Software Engineer" = invalid (FieldInvalid "Software Engineering is not a serious profession")
validateTitle s = valid (Title s)

validateSalary :: Validate Number Salary
validateSalary n 
    | n > 50000.0 = valid (Salary n)
validateSalary n = invalid (FieldInvalid "Salary is too damn low")

-- ...and create a conversion in a declarative way.. 
convert :: PersonInput -> Validated PersonOutput
convert =
  branch 
    >>> cherry { 
            -- ...by defining how your output data will look like...
            details : { 
                title: 
                    -- ...picking data from the input record using a lens... 
                    pick' (key :: _ "profession.title") validateTitle :: Pick PersonInput Title
              , salary:
                    -- ...and validating it using validators.
                    pick' (key :: _ "profession.salary") validateSalary :: Pick PersonInput Salary
              , jobType : Worker
            }
        }
    >>> blossom

Features

  • ๐Ÿ“œ Declarative data conversion: Define how your output data should look like instead of how to transform the input data
  • ๐ŸŽ’ Applicative error accumulation: Morello collects all validation erros instead of failing on the first error
  • ๐Ÿชข Fully composable: Cherries are just functions and therefore compose
  • ๐Ÿ”ญ Lens support: Use lenses to zoom into your input data
  • ๐Ÿ—บ๏ธ Unicode support: Define branches ๐ŸŒฑ, cherries ๐Ÿ’ and blossoms ๐ŸŒธ using unicode

Installation

spago install morello

Quick start

See MinimalSpec for a short example that illustrates the basic functionality.

Usage

See usage guide

Contributing

Contributions via issues & PRs are very welcome.

Acknowledgements

This work is merely connecting the dots of the amazing Purescript language and its awesome ecosystem. A special shout-out to the contributors & maintainers of the profunctor-lenses, heterogeneous and validation libraries. This library wouldn't have been possible without these.

License

Licensed under MIT-0.