Home

Awesome

Purescript Refined

A Purescript port of Refined.

Allows one to create types that restrain the values inside, and automatically generate validators for them.

For instance:

type DiceRoll = Refined (FromTo D1 D6) Int

invalidDiceRoll :: Either RefinedError DiceRoll
invalidDiceRoll = refine 8
-- invalidDiceRoll = Left (FromToError 1 6 8)

validDiceRoll :: Either RefinedError DiceRoll
validDiceRoll = refine 5
-- validDiceRoll = Right DiceRoll

diceRollToInt :: DiceRoll -> Int
diceRollToInt = unrefine

This package also contains EncodeJson and DecodeJson instances for Argonaut so that JSON data can be validated, and Arbitrary instances for use with QuickCheck.

Documentation can be found on Pursuit