aboutsummaryrefslogtreecommitdiff
path: root/Haskell-book/15/semigroup/test
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-12-11 10:28:11 +0100
committerEugen Wissner <belka@caraus.de>2025-12-11 10:28:11 +0100
commit98329e0a3dd4f78b5d815ac3896272ec70904901 (patch)
tree80f9c56cfe2ac20232358f236d32e84bd683be1b /Haskell-book/15/semigroup/test
parent3624c712d72d246f21d4e710cec7c11e052e0326 (diff)
downloadbook-exercises-98329e0a3dd4f78b5d815ac3896272ec70904901.tar.gz
Add remaining haskell book exercises
Diffstat (limited to 'Haskell-book/15/semigroup/test')
-rw-r--r--Haskell-book/15/semigroup/test/Main.hs72
1 files changed, 72 insertions, 0 deletions
diff --git a/Haskell-book/15/semigroup/test/Main.hs b/Haskell-book/15/semigroup/test/Main.hs
new file mode 100644
index 0000000..146ffdc
--- /dev/null
+++ b/Haskell-book/15/semigroup/test/Main.hs
@@ -0,0 +1,72 @@
+import Trivial
+import Identity
+import Two
+import Test.QuickCheck
+import Bool
+import Or
+import Combine
+import Data.Semigroup
+import Comp
+import Validation
+
+semigroupAssoc :: (Eq m, Semigroup m) => m -> m -> m -> Bool
+semigroupAssoc a b c = (a <> (b <> c)) == ((a <> b) <> c)
+
+type TrivAssoc =
+ Trivial -> Trivial -> Trivial -> Bool
+
+type TwoType = Two Trivial Trivial
+type ThreeType = Three Trivial Trivial Trivial
+type FourType = Four Trivial Trivial Trivial Trivial
+
+type CombineType = Combine Int (Sum Int)
+semigroupCombineAssoc :: CombineType -> CombineType -> CombineType -> Bool
+semigroupCombineAssoc a b c =
+ ((unCombine (a <> (b <> c))) 8) == ((unCombine ((a <> b) <> c)) 8)
+
+semigroupCompAssoc :: Comp (Sum Int) -> Comp (Sum Int) -> Comp (Sum Int) -> Bool
+semigroupCompAssoc a b c =
+ ((unComp (a <> (b <> c))) (Sum 8)) == ((unComp ((a <> b) <> c)) (Sum 8))
+
+monoidLeftIdentity :: (Eq m, Monoid m)
+ => m
+ -> Bool
+monoidLeftIdentity a = (mappend mempty a) == a
+
+monoidRightIdentity :: (Eq m, Monoid m)
+ => m
+ -> Bool
+monoidRightIdentity a = (mappend a mempty) == a
+
+
+
+main :: IO ()
+main = do
+ quickCheck (semigroupAssoc :: TrivAssoc)
+ quickCheck (monoidLeftIdentity :: Trivial -> Bool)
+ quickCheck (monoidRightIdentity :: Trivial -> Bool)
+
+ quickCheck (semigroupAssoc :: Identity Trivial -> Identity Trivial -> Identity Trivial -> Bool)
+ quickCheck (monoidLeftIdentity :: Identity (Sum Int)-> Bool)
+ quickCheck (monoidRightIdentity :: Identity (Sum Int) -> Bool)
+
+ quickCheck (semigroupAssoc :: TwoType -> TwoType -> TwoType -> Bool)
+ quickCheck (monoidLeftIdentity :: TwoType -> Bool)
+ quickCheck (monoidRightIdentity :: TwoType -> Bool)
+ quickCheck (semigroupAssoc :: ThreeType -> ThreeType -> ThreeType -> Bool)
+ quickCheck (monoidLeftIdentity :: ThreeType -> Bool)
+ quickCheck (monoidRightIdentity :: ThreeType -> Bool)
+ quickCheck (semigroupAssoc :: FourType -> FourType -> FourType -> Bool)
+ quickCheck (monoidLeftIdentity :: FourType -> Bool)
+ quickCheck (monoidRightIdentity :: FourType -> Bool)
+
+ quickCheck (semigroupAssoc :: BoolConj -> BoolConj -> BoolConj -> Bool)
+ quickCheck (monoidLeftIdentity :: BoolConj -> Bool)
+ quickCheck (monoidRightIdentity :: BoolConj -> Bool)
+ quickCheck (semigroupAssoc :: BoolDisj -> BoolDisj -> BoolDisj -> Bool)
+ quickCheck (monoidLeftIdentity :: BoolDisj -> Bool)
+ quickCheck (monoidRightIdentity :: BoolDisj -> Bool)
+ quickCheck (semigroupAssoc :: Or Trivial Trivial -> Or Trivial Trivial -> Or Trivial Trivial -> Bool)
+ quickCheck semigroupCombineAssoc
+ quickCheck semigroupCompAssoc
+ quickCheck (semigroupAssoc :: Validation String Int -> Validation String Int -> Validation String Int -> Bool)