blob: b3c3f785950a36302ed84583473311e0815cee6e (
plain) (
tree)
|
|
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
|