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

[ bsd3, data, library ] [ Propose Tags ]

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.

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."

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.

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.

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.

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 (>=4.8 && <5), bifunctors (>=3.0), lens (>=4.0 && <5), mtl (>=2.0 && <2.3), semigroupoids (>=4.0), semigroups (>=0.8), transformers (>=0.3 && <0.5) [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>
Revised Revision 1 made by qfpl at Mon Oct 9 04:30:48 UTC 2017
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 Tue Feb 17 04:40:27 UTC 2015
Distributions LTSHaskell:1, NixOS:1, Stackage:1, openSUSE:1
Downloads 7682 total (50 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-02-17 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Flags

NameDescriptionDefaultType
small_base

Choose the new, split-up base package.

EnabledAutomatic

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

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees