diff options
| author | Eugen Wissner <belka@caraus.de> | 2025-12-09 16:32:32 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2025-12-09 16:32:32 +0100 |
| commit | 3624c712d72d246f21d4e710cec7c11e052e0326 (patch) | |
| tree | f385cb51c72a0c5eeb2057609b75f5f8c6c4f272 /Haskell-book/06/src/EqInstances.purs | |
| parent | c95abc31d62e296db4f1b537e3de440dd40defd1 (diff) | |
| download | book-exercises-3624c712d72d246f21d4e710cec7c11e052e0326.tar.gz | |
Add the haskell book
Diffstat (limited to 'Haskell-book/06/src/EqInstances.purs')
| -rw-r--r-- | Haskell-book/06/src/EqInstances.purs | 63 |
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 |
