blob: 0fc6accee11fe632864022181d8e16f2f5623dec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
{-# LANGUAGE NoImplicitPrelude #-}
module PhhhbbtttEither where
import Prelude ( Monad(..)
, Functor(..)
, Applicative(..)
, Eq(..)
, ($)
, Show(..) )
import Test.QuickCheck
import Test.QuickCheck.Checkers
data PhhhbbtttEither b a =
Left a
| Right b
deriving (Eq, Show)
instance Functor (PhhhbbtttEither b) where
fmap f (Right x) = Right x
fmap f (Left x) = Left $ f x
instance Applicative (PhhhbbtttEither b) where
pure x = Left x
Right f <*> _ = Right f
Left f <*> x = fmap f x
instance Monad (PhhhbbtttEither b) where
return = pure
(Right x) >>= f = Right x
(Left x) >>= f = f x
instance (Arbitrary a, Arbitrary b) => Arbitrary (PhhhbbtttEither b a) where
arbitrary = frequency [ (1, fmap Right arbitrary)
, (1, fmap Left arbitrary)
]
instance (Eq a, Eq b) => EqProp (PhhhbbtttEither b a) where
(=-=) = eq
|