summaryrefslogtreecommitdiff
path: root/testsuite/tests/simplCore/should_compile/T17722A.hs
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
  (<*>) = (<.>)