Skip to content

Commit fb90a10

Browse files
committed
chapter 16 - added a module for functor laws
1 parent e9fbf9f commit fb90a10

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

chapter16/FunctorLaws.hs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Test.QuickCheck
2+
import Test.QuickCheck.Function
3+
4+
functorIdentity :: (Functor f, Eq (f a)) =>
5+
f a -> Bool
6+
functorIdentity f = fmap id f == f
7+
8+
functorCompose :: (Functor f, Eq (f c)) =>
9+
(a -> b)
10+
-> (b -> c)
11+
-> f a
12+
-> Bool
13+
functorCompose f g x =
14+
(fmap g (fmap f x)) == fmap (g . f) x
15+
16+
functorCompose' :: (Eq (f c), Functor f) =>
17+
f a
18+
-> Fun a b
19+
-> Fun b c
20+
-> Bool
21+
functorCompose' x (Fun _ f) (Fun _ g) =
22+
(fmap g (fmap f x)) == fmap (g . f) x

0 commit comments

Comments
 (0)