digestive-functors- A practical formlet library

Safe HaskellSafe-Infered





data Form v m a Source

Base type for a form.

The three type parameters are:

  • v: the type for textual information, displayed to the user. For example, error messages are of this type. v stands for view.
  • m: the monad in which validators operate. The classical example is when validating input requires access to a database, in which case this m should be an instance of MonadIO.
  • a: the type of the value returned by the form, used for its Applicative instance.


Monad m => Functor (Form v m) 
(Monad m, Monoid v) => Applicative (Form v m) 
Show (Form v m a) 

data SomeForm v m Source


forall a . SomeForm (Form v m a) 


Show (SomeForm v m) 

(.:) :: Text -> Form v m a -> Form v m aSource

Operator to set a name for a subform.


stringRead :: (Monad m, Read a, Show a) => v -> Maybe a -> Form v m aSource

choice :: Eq a => [(a, v)] -> Maybe a -> Form v m aSource



:: Bool

Default value

-> Form v m Bool

Resulting form




:: Monad m 
=> v

Error message (if fail)

-> (a -> Bool)

Validating predicate

-> Form v m a

Form to validate

-> Form v m a

Resulting form

Validate the results of a form with a simple predicate


 check "Can't be empty" (not . null) (string Nothing)

checkM :: Monad m => v -> (a -> m Bool) -> Form v m a -> Form v m aSource

Version of check which allows monadic validations

validate :: Monad m => (a -> Result v b) -> Form v m a -> Form v m bSource

This is an extension of check that can be used to apply transformations that optionally fail

Example: taking the first character of an input string

 head' :: String -> Result String Char
 head' []      = Error "Is empty"
 head' (x : _) = Success x

 char :: Monad m => Form m String Char
 char = validate head' (string Nothing)

validateM :: Monad m => (a -> m (Result v b)) -> Form v m a -> Form v m bSource

Version of validate which allows monadic validations