module Test.Sloth.Function
(
isDataTypeFun,
fun2, fun3, fun4, fun5, fun6, fun7
) where
import Data.Data ( Typeable,Data,DataType,dataTypeName )
import Data.List ( isPrefixOf )
isDataTypeFun :: DataType -> Bool
isDataTypeFun dt = "Test.Sloth.Function.Fun" `isPrefixOf` dataTypeName dt
data Fun2 a b = Fun2 a b
deriving (Typeable,Data)
fun2 :: (a -> b -> c) -> Fun2 a b -> c
fun2 f (Fun2 x y) = f x y
data Fun3 a b c = Fun3 a b c
deriving (Typeable,Data)
fun3 :: (a -> b -> c -> d) -> Fun3 a b c -> d
fun3 f (Fun3 x y z) = f x y z
data Fun4 a b c d = Fun4 a b c d
deriving (Typeable,Data)
fun4 :: (a -> b -> c -> d -> e) -> Fun4 a b c d -> e
fun4 f (Fun4 x y z w) = f x y z w
data Fun5 a b c d e = Fun5 a b c d e
deriving (Typeable,Data)
fun5 :: (a -> b -> c -> d -> e -> f) -> Fun5 a b c d e -> f
fun5 f (Fun5 x y z w u) = f x y z w u
data Fun6 a b c d e f = Fun6 a b c d e f
deriving (Typeable,Data)
fun6 :: (a -> b -> c -> d -> e -> f -> g) -> Fun6 a b c d e f -> g
fun6 f (Fun6 x y z w u v) = f x y z w u v
data Fun7 a b c d e f g = Fun7 a b c d e f g
deriving (Typeable,Data)
fun7 :: (a -> b -> c -> d -> e -> f -> g -> h) -> Fun7 a b c d e f g -> h
fun7 f (Fun7 x y z w u v a) = f x y z w u v a