packages feed

validation 0.3.4 → 0.4.0

raw patch · 3 files changed

+89/−94 lines, 3 files

Files

changelog view
@@ -17,3 +17,8 @@ 0.3.3  Provide Isos between (ValidationT Identity) and other data types.++0.3.4++Loosen the type of the Isos for polymorphic update.+
src/Data/Validation.hs view
@@ -11,19 +11,16 @@ , ValidationT(..) , Validation'   -- * Prisms-, Validate(..)+, _Failure+, _Success   -- * Isomorphisms-, isoAccValidationEither-, isoValidationEither-, isoAccValidationValidation-, isoValidationTEither-, isoAccValidationValidationT-, isoValidationValidationT+, Validate(..) ) where  import Control.Applicative(Applicative(..), Alternative(..), liftA2, (<$>))+import Control.Lens((^.)) import Control.Lens.Prism(Prism, prism)-import Control.Lens.Iso(Swapped(..), Iso, iso, from)+import Control.Lens.Iso(Swapped(..), Iso, iso) import Control.Lens.Review(( # )) import Control.Monad(Monad(..)) import Data.Bifoldable(Bifoldable(..))@@ -33,7 +30,7 @@ import Data.Either(Either(..)) import Data.Eq(Eq) import Data.Foldable(Foldable(..))-import Data.Function((.), flip)+import Data.Function((.), id, flip) import Data.Functor(Functor(..)) import Data.Functor.Alt(Alt(..)) import Data.Functor.Apply(Apply(..))@@ -341,41 +338,88 @@                                Success a -> runValidationT (f a))  class Validate f where-  _Failure ::-    Prism (f e1 a) (f e2 a) e1 e2-  _Success ::-    Prism (f e a) (f e b) a b--instance Validate AccValidation where-  _Success =-    prism AccSuccess (\v -> case v of-                              AccFailure e -> Left (AccFailure e)-                              AccSuccess a -> Right a)-  _Failure =-    prism AccFailure (\v -> case v of-                              AccFailure e -> Right e-                              AccSuccess a -> Left (AccSuccess a))+  _Validation ::+    Iso (f e a) (f g b) (Validation e a) (Validation g b)+  _Validation' ::+    Iso (f e a) (f g b) (Validation' e a) (Validation' g b)+  _Validation' =+    iso+      (\x -> ValidationT (Identity (x ^. _Validation)))+      (\(ValidationT (Identity x)) -> _Validation # x)+  _AccValidation ::+    Iso (f e a) (f g b) (AccValidation e a) (AccValidation g b)+  _AccValidation =+    iso+      (\x -> case x ^. _Validation of+               Failure e -> AccFailure e+               Success a -> AccSuccess a)+      (\x -> _Validation # case x of+                             AccFailure e -> Failure e+                             AccSuccess a -> Success a)+  _Either ::+    Iso (f e a) (f g b) (Either e a) (Either g b)+  _Either =+    iso+      (\x -> case x ^. _Validation of+               Failure e -> Left e+               Success a -> Right a)+      (\x -> _Validation # case x of+                             Left e -> Failure e+                             Right a -> Success a)  instance Validate Validation where-  _Success =-    prism Success (\v -> case v of-                              Failure e -> Left (Failure e)-                              Success a -> Right a)-  _Failure =-    prism Failure (\v -> case v of-                              Failure e -> Right e-                              Success a -> Left (Success a))+  _Validation =+    iso+      id+      id+instance Validate AccValidation where+  _Validation =+    iso+      (\x -> case x of+               AccFailure e -> Failure e+               AccSuccess a -> Success a)+      (\x -> case x of+               Failure e -> AccFailure e+               Success a -> AccSuccess a)+  _AccValidation =+    iso +      id+      id  instance Validate Either where-  _Success =-    prism Right (\v -> case v of-                              Left e -> Left (Left e)-                              Right a -> Right a)-  _Failure =-    prism Left (\v -> case v of-                              Left e -> Right e-                              Right a -> Left (Right a))+  _Validation =+    iso+      (\x -> case x of+               Left e -> Failure e+               Right a -> Success a)+      (\x -> case x of+               Failure e -> Left e+               Success a -> Right a)+  _Either =+    iso +      id+      id +_Failure ::+  Validate f =>+  Prism (f e1 a) (f e2 a) e1 e2+_Failure =+  prism+    (\x -> _Either # Left x)+    (\x -> case x ^. _Either of+             Left e -> Right e+             Right a -> Left (_Either # Right a))++_Success ::+  Validate f =>+  Prism (f e a) (f e b) a b+_Success =+  prism+    (\x -> _Either # Right x)+    (\x -> case x ^. _Either of+             Left e -> Left (_Either # Left e)+             Right a -> Right a)+ instance Swapped AccValidation where   swapped =     iso@@ -401,57 +445,3 @@     iso       (\(ValidationT x) -> ValidationT (fmap (swapped # ) x))       (\(ValidationT x) -> ValidationT (fmap (swapped # ) x))--isoAccValidationEither ::-  Iso (AccValidation e a) (AccValidation f b) (Either e a) (Either f b)-isoAccValidationEither =-  iso-    (\v -> case v of-             AccFailure e -> Left e-             AccSuccess a -> Right a)-    (\v -> case v of-             Left e -> AccFailure e-             Right a -> AccSuccess a)--isoValidationEither ::-  Iso (Validation e a) (Validation f b) (Either e a) (Either f b)-isoValidationEither =-  iso-    (\v -> case v of-             Failure e -> Left e-             Success a -> Right a)-    (\v -> case v of-             Left e -> Failure e-             Right a -> Success a)--isoAccValidationValidation ::-  Iso (AccValidation e a) (AccValidation f b) (Validation e a) (Validation f b)-isoAccValidationValidation =-  iso-    (\v -> case v of-             AccFailure e -> Failure e-             AccSuccess a -> Success a)-    (\v -> case v of-             Failure e -> AccFailure e-             Success a -> AccSuccess a)--isoValidationTEither ::-  Iso (Validation' e a) (Validation' f b) (Either e a) (Either f b)-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) (AccValidation f b) (Validation' e a) (Validation' f b)-isoAccValidationValidationT =-  isoAccValidationEither . from isoValidationTEither--isoValidationValidationT ::-  Iso (Validation e a) (Validation f b) (Validation' e a) (Validation' f b)-isoValidationValidationT =-  isoValidationEither . from isoValidationTEither
validation.cabal view
@@ -1,5 +1,5 @@ name:               validation-version:            0.3.4+version:            0.4.0 license:            BSD3 license-file:       LICENSE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>, Nick Partridge