diff options
Diffstat (limited to 'testsuite/tests/simplCore/should_compile/T17722A.hs')
-rw-r--r-- | testsuite/tests/simplCore/should_compile/T17722A.hs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/testsuite/tests/simplCore/should_compile/T17722A.hs b/testsuite/tests/simplCore/should_compile/T17722A.hs new file mode 100644 index 0000000000..1f63582beb --- /dev/null +++ b/testsuite/tests/simplCore/should_compile/T17722A.hs @@ -0,0 +1,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
+ (<*>) = (<.>)
|