# validation: A data-type like Either but with an accumulating Applicative

Several data-types like Either but with differing properties and type-class instances.

Library support is provided for those different representations, include
`lens`

-related functions for converting between each and abstracting over their
similarities.

`AccValidation`

The `AccValidation`

data type is isomorphic to `Either`

, but has an instance
of `Applicative`

that accumulates on the error side. That is to say, if two
(or more) errors are encountered, they are appended using a `Semigroup`

operation.

As a consequence of this `Applicative`

instance, there is no corresponding
`Bind`

or `Monad`

instance. `AccValidation`

is an example of, "An applicative
functor that is not a monad."

`Validation`

The `Validation`

data type is isomorphic to `Either`

and has a `Monad`

instance that does the same as `Either`

. The only difference to `Either`

is
the constructor names and surrounding library support.

`ValidationT`

The `ValidationT`

data type is the monad transformer for `Validation`

. An
instance of `MonadTrans`

is provided for `(ValidationT err)`. Due to the
arrangement of the `ValidationT`

type constructor, which permits a `MonadTrans
instance, there is no possible `Bifunctor`

instance. Consequently, the
`ValidationB`

data type provides a `Bifunctor`

instance (but not a
`MonadTrans`

instance). Library support is provided to exploit the isomorphism
to `ValidationB`

.

Note that since `AccValidation`

is not a monad, there is also no corresponding
monad transformer for this data type.

`ValidationB`

The `ValidationB`

data type is similar to the monad transformer for
`Validation`

(`ValidationT`

), however, due to the arrangement of the
`ValidationB`

type constructor, which permits a `Bifunctor`

instance, there is
no possible `MonadTrans`

instance. Consequently, the `ValidationT`

data type
provides a `MonadTrans`

instance (but not a `Bifunctor`

instance). Library
support is provided to exploit the isomorphism to `ValidationT`

.

`Validation'`

The `Validation`

err a` type-alias is equivalent to
`ValidationT err Identity a` and so is isomorphic to `Either`

and others.
Libraries are supplied accordingly.

Versions | 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.5.0, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 1 |
---|---|

Change log | changelog |

Dependencies | base (>=3 && <5), bifunctors (>=3.0), lens (>=4.0 && <5), mtl (>=2.0 && <2.3), semigroupoids (>=4.0), semigroups (>=0.8), transformers (>=0.3 && <0.6) [details] |

License | BSD-3-Clause |

Copyright | Copyright (C) 2014,2015 NICTA Limited |

Author | Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>, Nick Partridge <nkpart> |

Maintainer | Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>, Nick Partridge <nkpart> |

Category | Data |

Home page | https://github.com/NICTA/validation |

Bug tracker | https://github.com/NICTA/validation/issues |

Source repo | head: git clone git@github.com:NICTA/validation.git |

Uploaded | by TonyMorris at Thu Nov 24 07:23:20 UTC 2016 |

Distributions | LTSHaskell:1, NixOS:1, Stackage:1 |

Downloads | 8414 total (84 in the last 30 days) |

Rating | 2.5 (votes: 3) [estimated by rule of succession] |

Your Rating | |

Status | Docs available [build log] Last success reported on 2016-11-24 [all 1 reports] Hackage Matrix CI |

## Flags

Name | Description | Default | Type |
---|---|---|---|

small_base | Choose the new, split-up base package. | Enabled | Automatic |

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

## Downloads

- validation-0.5.4.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)