{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
module Tuples where
class Annex c b a | c -> a, c -> b where
annex :: b -> a -> c
instance Annex (a, b, c) (a, b) c where
annex :: (a, b) -> c -> (a, b, c)
annex (a
a, b
b) c
c = (a
a, b
b, c
c)
instance Annex (a, b, c, d) (a, b, c) d where
annex :: (a, b, c) -> d -> (a, b, c, d)
annex (a
a, b
b, c
c) d
d = (a
a, b
b, c
c, d
d)
instance Annex (a, b, c, d, e) (a, b, c, d) e where
annex :: (a, b, c, d) -> e -> (a, b, c, d, e)
annex (a
a, b
b, c
c, d
d) e
e = (a
a, b
b, c
c, d
d, e
e)
instance Annex (a, b, c, d, e, f) (a, b, c, d, e) f where
annex :: (a, b, c, d, e) -> f -> (a, b, c, d, e, f)
annex (a
a, b
b, c
c, d
d, e
e) f
f = (a
a, b
b, c
c, d
d, e
e, f
f)