Lightweight pure data validation based on
validation-selective is built around the following data type:
data Validation e a = Failure e | Success a
This data type is similar to
Either but allows accumulating all
errors instead of short-circuiting on the first one.
For more examples and library tutorial, refer to Haddock:
Comparison with other packages
validation-selective is not the only package that provides such
Validation data type. However, unlike other packages, it has some
validation-selectivedepends only on
selective(which is tiny) Haskell libraries which make this package fast to build. So adding validation capabilities to your library or application doesn’t contribute much to your dependency footprint.
- Selective instance.
validation-selectiveis the only package that provides
Validationwhich allows using
Monad-like branching behaviour but without implementing wrong
- More algebraic instances.
validation-selectivealso provides the
Alternativeinstance and a more general
- Best-in-class documentation. Official Haddock documentation
contains mini-tutorial, usage example, per-component comparison with
Either, the motivation behind each instance and the interface in general along with examples for each instance and function.
The below section provides per-package comparison with the most popular validation packages in the Haskell ecosystem:
Validationimplementation by Edward Kmett. This package is more heavyweight, since it depends on more Haskell libraries like
semigroupoids. But it also provides prisms for
Validationand some combinators for
Validationfrom Queensland Functional Programming Lab. Depends on
lens, which makes it even heavier but also have richer interface compared to the
How to use
validation-selective is compatible with the latest GHC compiler
versions starting from
In order to start using
validation-selective in your project, you
will need to set it up with the three easy steps:
Add the dependency on
validation-selectivein your project’s
.cabalfile. For this, you should modify the
build-dependssection by adding the name of this library. After the adjustment, this section could look like this:
build-depends: base ^>= 4.14 , validation-selective ^>= 0.0
In the module where you wish to implement pure data validation, you should add the import:
import Validation (Validation (..))
Now you can use the types and functions from the library:
main :: IO () main = print [Failure "wrong", Success 42]
Usage with Stack
validation-selective is not available on your current Stackage
resolver yet, fear not! You can still use it from Hackage by adding
the following to the
extra-deps section of your
extra-deps: - validation-selective-CURRENT_VERSION
🥧 0.1.0.1 — Mar 14, 2021
- #57: Support GHC-9.0. Upgrade minor version to 8.10.4 and 8.8.4.
0.1.0.0 — May 5, 2020
- #41: Support GHC-8.10.1.
- Initially created.