blob: 1f63582beb5ad19c89beaf2c17117e9b46a14717 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
module T17722A (Validation(..)) where
data Validation e a
= Failure e
| Success a
instance Functor (Validation e) where
fmap _ (Failure e) = Failure e
fmap f (Success a) = Success (f a)
(<.>) :: Semigroup e => Validation e (t -> a) -> Validation e t -> Validation e a
Failure e1 <.> b = Failure $ case b of
Failure e2 -> e1 <> e2
Success _ -> e1
Success _ <.> Failure e = Failure e
Success f <.> Success x = Success (f x)
instance Semigroup e => Applicative (Validation e) where
pure = Success
(<*>) = (<.>)
|