validation 0.3.2 → 0.3.3
raw patch · 3 files changed
+39/−5 lines, 3 filesdep +transformers
Dependencies added: transformers
Files
- changelog +4/−0
- src/Data/Validation.hs +33/−4
- validation.cabal +2/−1
changelog view
@@ -13,3 +13,7 @@ 0.3.2 Implement Validate on Either++0.3.3++Provide Isos between (ValidationT Identity) and other data types.
src/Data/Validation.hs view
@@ -9,18 +9,22 @@ AccValidation , Validation , ValidationT(..)+, Validation' -- * Prisms , Validate(..) -- * Isomorphisms , isoAccValidationEither , isoValidationEither , isoAccValidationValidation+, isoValidationTEither+, isoAccValidationValidationT+, isoValidationValidationT ) where import Control.Applicative(Applicative(..), Alternative(..), liftA2, (<$>)) import Control.Lens.Prism(Prism, prism)-import Control.Lens.Iso(Swapped(..), Iso', iso)-import Control.Lens.Review((#))+import Control.Lens.Iso(Swapped(..), Iso', iso, from)+import Control.Lens.Review(( # )) import Control.Monad(Monad(..)) import Data.Bifoldable(Bifoldable(..)) import Data.Bifunctor(Bifunctor(..))@@ -34,6 +38,7 @@ import Data.Functor.Alt(Alt(..)) import Data.Functor.Apply(Apply(..)) import Data.Functor.Bind(Bind(..), liftF2)+import Data.Functor.Identity(Identity(..)) import Data.Monoid(Monoid(..)) import Data.Ord(Ord) import Data.Semigroup(Semigroup(..))@@ -270,6 +275,9 @@ runValidationT :: m (Validation err a) } +type Validation' err a =+ ValidationT Identity err a+ instance Functor m => Functor (ValidationT m err) where fmap f (ValidationT k) = ValidationT (fmap (fmap f) k)@@ -391,8 +399,8 @@ instance Functor f => Swapped (ValidationT f) where swapped = iso- (\(ValidationT x) -> ValidationT (fmap (swapped #) x))- (\(ValidationT x) -> ValidationT (fmap (swapped #) x))+ (\(ValidationT x) -> ValidationT (fmap (swapped # ) x))+ (\(ValidationT x) -> ValidationT (fmap (swapped # ) x)) isoAccValidationEither :: Iso' (AccValidation e a) (Either e a)@@ -426,3 +434,24 @@ (\v -> case v of Failure e -> AccFailure e Success a -> AccSuccess a)++isoValidationTEither ::+ Iso' (Validation' e a) (Either e a)+isoValidationTEither =+ iso+ (\(ValidationT v) -> case runIdentity v of+ Failure e -> Left e+ Success a -> Right a)+ (\v -> ValidationT (Identity (case v of + Left e -> Failure e+ Right a -> Success a)))++isoAccValidationValidationT ::+ Iso' (AccValidation e a) (Validation' e a)+isoAccValidationValidationT =+ isoAccValidationEither . from isoValidationTEither++isoValidationValidationT ::+ Iso' (Validation e a) (Validation' e a)+isoValidationValidationT =+ isoValidationEither . from isoValidationTEither
validation.cabal view
@@ -1,5 +1,5 @@ name: validation-version: 0.3.2+version: 0.3.3 license: BSD3 license-file: LICENSE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>, Nick Partridge@@ -31,6 +31,7 @@ , semigroupoids >= 4.0 , bifunctors >= 3.0 , lens >= 4.0+ , transformers >= 0.3.0.0 ghc-options: -Wall