packages feed

validation-1.2.1: validation.cabal

name:               validation
version:            1.2.1
license:            BSD3
license-file:       LICENCE
author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>, Nick Partridge <nkpart>
maintainer:         Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>, Nick Partridge <nkpart>
copyright:          Copyright (C) 2010-2013 Tony Morris, Nick Partridge
                    Copyright (C) 2014,2015 NICTA Limited
                    Copyright (c) 2016-2019 Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230
                    Copyright (c) 2019-2026 Tony Morris
synopsis:           A data-type like Either but with an accumulating Applicative
category:           Data
description:
  <<https://logo.systemf.com.au/systemf-450x450.png>>
  .
  A data type like @Either@ but with an accumulating @Applicative@ instance.
  .
  == @Validation@
  .
  The @Validation@ 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. @Validation@ is an example of, "An applicative
  functor that is not a monad."
  .
  The library provides:
  .
  * Classy optics (@GetValidation@, @HasValidation@, @ReviewValidation@,
    @AsValidation@, and corresponding classes for @Failure@ and @Success@)
    following the conventions of @makeClassy@ and @makeClassyPrisms@ from @lens@.
  * Polymorphic prisms (@__Failure@, @__Success@) for type-changing operations.
  * Isomorphisms to @Either@ and @(Bool, a)@.
  .
  == @Validator@
  .
  The @Validator@ newtype is a profunctor transformer:
  .
  @newtype Validator e p x a = Validator (p x (Validation e a))@
  .
  @Validator e (->) x a@ is isomorphic to @x -> Validation e a@. The profunctor
  parameter @p@ generalises this to other optic-like contexts such as @Tagged@,
  @Iso@, and @Prism@.
  .
  Instances include @Functor@, @Apply@, @Applicative@, @Alt@, @Selective@,
  @Profunctor@, @Strong@, @Choice@, @Semigroupoid@, @Category@, @Arrow@,
  @ArrowApply@, @ArrowChoice@, and @Wrapped@.
  .
  The @Applicative@ instance accumulates errors in parallel (using @Semigroup@),
  while @Category@ composition short-circuits on @Failure@ (like monadic bind).
  .
  The library also provides profunctor newtype wrappers (@Iso''@, @Prism''@) that
  allow @Validator@ to be parameterised over monomorphic isos and prisms.

homepage:           https://github.com/system-f/validation
bug-reports:        https://github.com/system-f/validation/issues
cabal-version:      >= 1.10
build-type:         Simple
extra-source-files: changelog
tested-with:        GHC == 9.10.3, GHC == 9.8.4, GHC == 9.6.7, GHC==9.0.1, GHC==8.10.4, GHC==8.8.4, GHC==8.6.5, GHC==8.4.4

source-repository   head
  type:             git
  location:         git@github.com:system-f/validation.git

library
  default-language:
                    Haskell2010

  build-depends:
                      base          >= 4.11   && < 5
                    , assoc         >= 1      && < 2
                    , deepseq       >= 1.4.3  && < 2
                    , selective     >= 0.6    && < 1
                    , semigroups    >= 0.18.2 && < 1
                    , semigroupoids >= 5.2.2  && < 7
                    , bifunctors    >= 5.5    && < 6
                    , lens          >= 4.0.5  && < 6
                    , profunctors   >= 5      && < 6
                    , tagged        >= 0.8    && < 1

  ghc-options:
                    -Wall

  hs-source-dirs:
                    src

  exposed-modules:
                    Data.Validation

test-suite hedgehog
  type:
                    exitcode-stdio-1.0

  main-is:
                    hedgehog_tests.hs

  default-language:
                    Haskell2010

  build-depends:
                      base         >= 4.11   && < 5
                    , assoc        >= 1      && < 2
                    , bifunctors   >= 5.5    && < 6
                    , hedgehog     >= 0.5    && < 2
                    , lens         >= 4.0.5  && < 6
                    , semigroupoids >= 5.2.2 && < 7
                    , semigroups   >= 0.18.2 && < 1
                    , validation

  ghc-options:
                    -Wall
                    -threaded

  hs-source-dirs:
                    test

test-suite doctest
  type:
                    exitcode-stdio-1.0

  main-is:
                    doctest_tests.hs

  default-language:
                    Haskell2010

  build-depends:
                      base       >= 4.11   && < 5
                    , process    >= 1.6    && < 2
                    , validation

  ghc-options:
                    -Wall
                    -threaded

  hs-source-dirs:
                    test