{-# LANGUAGE DeriveDataTypeable #-} 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