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