aboutsummaryrefslogtreecommitdiff
path: root/hypsrc-test/src/Classes.hs
diff options
context:
space:
mode:
authorŁukasz Hanuszczak <lukasz.hanuszczak@gmail.com>2015-07-02 19:05:58 +0200
committerŁukasz Hanuszczak <lukasz.hanuszczak@gmail.com>2015-07-02 19:05:58 +0200
commit29bb1ce86e12b368c4eb91dbf515391a0958b8c3 (patch)
tree310b9c071ae7f66ee488530f16e6024162900478 /hypsrc-test/src/Classes.hs
parentef3b8691ea607bd4f67d5dc77bb226cf57ec4c30 (diff)
Create hyperlinker test case for type classes.
Diffstat (limited to 'hypsrc-test/src/Classes.hs')
-rw-r--r--hypsrc-test/src/Classes.hs38
1 files changed, 38 insertions, 0 deletions
diff --git a/hypsrc-test/src/Classes.hs b/hypsrc-test/src/Classes.hs
new file mode 100644
index 00000000..bddb9939
--- /dev/null
+++ b/hypsrc-test/src/Classes.hs
@@ -0,0 +1,38 @@
+module Classes where
+
+
+class Foo a where
+ bar :: a -> Int
+ baz :: Int -> (a, a)
+
+instance Foo Int where
+ bar = id
+ baz x = (x, x)
+
+instance Foo [a] where
+ bar = length
+ baz _ = ([], [])
+
+
+class Foo a => Foo' a where
+ quux :: (a, a) -> a
+ quux (x, y) = norf [x, y]
+
+ norf :: [a] -> a
+ norf = quux . baz . sum . map bar
+
+instance Foo' Int where
+ norf = sum
+
+instance Foo' [a] where
+ quux = uncurry (++)
+
+
+class Plugh p where
+ plugh :: p a a -> p b b -> p (a -> b) (b -> a)
+
+instance Plugh Either where
+ plugh (Left a) _ = Right $ const a
+ plugh (Right a) _ = Right $ const a
+ plugh _ (Left b) = Left $ const b
+ plugh _ (Right b) = Left $ const b