summaryrefslogtreecommitdiff
path: root/functor
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-03-25 15:14:35 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-03-25 15:14:35 +0800
commit22fc8bffd0ee10d4e7e4ad7f4c65b472fea4fb50 (patch)
tree44ff6c3c972c56a027c606c9cef20b9d32e9e1dc /functor
downloadtypeclass-22fc8bffd0ee10d4e7e4ad7f4c65b472fea4fb50.tar.gz
typeclass-22fc8bffd0ee10d4e7e4ad7f4c65b472fea4fb50.tar.bz2
typeclass-22fc8bffd0ee10d4e7e4ad7f4c65b472fea4fb50.zip
first commit
Diffstat (limited to 'functor')
-rw-r--r--functor/h1.hs7
-rw-r--r--functor/h2.hs2
-rw-r--r--functor/h3.hs6
3 files changed, 15 insertions, 0 deletions
diff --git a/functor/h1.hs b/functor/h1.hs
new file mode 100644
index 0000000..11688ad
--- /dev/null
+++ b/functor/h1.hs
@@ -0,0 +1,7 @@
+data MyEither a b = MyLeft a | MyRight b
+ deriving (Show)
+
+instance Functor (MyEither a) where
+ fmap f (MyLeft a) = MyLeft a
+ fmap f (MyRight b) = MyRight (f b)
+
diff --git a/functor/h2.hs b/functor/h2.hs
new file mode 100644
index 0000000..54be77c
--- /dev/null
+++ b/functor/h2.hs
@@ -0,0 +1,2 @@
+instance Functor ((->) e) where
+ fmap = (.)
diff --git a/functor/h3.hs b/functor/h3.hs
new file mode 100644
index 0000000..1a048f6
--- /dev/null
+++ b/functor/h3.hs
@@ -0,0 +1,6 @@
+data ITree a =
+ Leaf (Int -> a) | Node [ITree a]
+
+instance Functor ITree where
+ fmap f (Node x) = Node (fmap (fmap f) x)
+ fmap f (Leaf x) = Leaf (f.x)