aboutsummaryrefslogtreecommitdiff
path: root/Haskell-book/06/src/EqInstances.purs
diff options
context:
space:
mode:
Diffstat (limited to 'Haskell-book/06/src/EqInstances.purs')
-rw-r--r--Haskell-book/06/src/EqInstances.purs63
1 files changed, 63 insertions, 0 deletions
diff --git a/Haskell-book/06/src/EqInstances.purs b/Haskell-book/06/src/EqInstances.purs
new file mode 100644
index 0000000..987d273
--- /dev/null
+++ b/Haskell-book/06/src/EqInstances.purs
@@ -0,0 +1,63 @@
+module EqInstances where
+ -- Exercise: Eq Instances
+ -- p. 178
+
+import Prelude
+
+-- Ex. 1
+data TisAnInteger =
+ TisAn Int
+
+instance eqTisAn :: Eq TisAnInteger where
+ eq x y = x == y
+
+-- Ex. 2
+data TwoIntegers =
+ Two Int Int
+
+instance ewTwoIntegers :: Eq TwoIntegers where
+ eq (Two x y) (Two x' y') = x == x' && y == y'
+
+-- Ex. 3
+data StringOrInt =
+ TisAnInt Int
+ | TisAString String
+
+instance eqStringOrInt :: Eq StringOrInt where
+ eq (TisAnInt x) (TisAnInt y) = x == y
+ eq (TisAString x) (TisAString y) = x == y
+ eq _ _ = false
+
+-- Ex. 4
+data Pair a =
+ Pair a a
+
+instance eqPair :: Eq a => Eq (Pair a) where
+ eq (Pair a b) (Pair a' b') = a == a' && b == b'
+
+-- Ex. 5
+data Tuple a b =
+ Tuple a b
+
+instance eqTuple :: (Eq a, Eq b) => Eq (Tuple a b) where
+ eq (Tuple a b) (Tuple a' b') = a == a' && b == b'
+
+-- Ex. 6
+data Which a =
+ ThisOne a
+ | ThatOne a
+
+instance eqWhich :: Eq a => Eq (Which a) where
+ eq (ThisOne x) (ThisOne y) = x == y
+ eq (ThatOne x) (ThatOne y) = x == y
+ eq _ _ = false
+
+-- Ex. 7
+data EitherOr a b =
+ Hello a
+ | Goodbye b
+
+instance eqEitherOr :: (Eq a, Eq b) => Eq (EitherOr a b) where
+ eq (Hello _) (Goodbye _) = false
+ eq (Goodbye _) (Hello _) = false
+ eq _ _ = true