validation-selective
 

 

Lightweight pure data validation based on Applicative and Selective functors.
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
noticeable advantages:
- Lightweight. validation-selectivedepends only onbaseandselective(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 providesSelectiveinstance forValidationwhich allows
usingMonad-like branching behaviour but without implementing
wrongMonadinstance.
- More algebraic instances. validation-selectivealso provides
theAlternativeinstance and a more generalSemigroupinstance.
- 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:
- either:- Validationimplementation by Edward Kmett. This package is more heavyweight,
since it depends on more Haskell libraries like- profunctors,- bifunctors,- semigroupoids. But it also provides prisms for- Validationand some combinators for- Either.
- validation:- Validationfrom Queensland Functional Programming Lab.
Depends on- lens, which makes it even heavier but also have richer
interface compared to the- eitherpackage.
How to use
validation-selective is compatible with the latest GHC compiler
versions starting from 8.6.
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 thebuild-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
If 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 stack.yaml file:
extra-deps:
  - validation-selective-CURRENT_VERSION