Lighweight pure data validation based on Applicative and Selective functors.
Lighweight pure data validation based on Applicative and Selective functors. The library builds validation interface around the following data type:
data Validation e a = Failure e | Success a
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 likeprofunctors,bifunctors,semigroupoids. But it also provides prisms forValidationand some combinators forEither.validation:Validationfrom Queensland Functional Programming Lab. Depends onlens, which makes it even heavier but also have richer interface compared to theeitherpackage.
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.0In 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