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 aThis 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.4.4.
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π
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