{-# LANGUAGE TypeFamilies, UndecidableInstances #-} module Types.Data.List.Ops ( App , App2 , App3 , App4 , App5 , Map , Foldl ) where import Types.Data.List type family App f a type family App2 f a b type family App3 f a b c type family App4 f a b c d type family App5 f a b c d e type family Map f l type instance Map f Null = Null type instance Map f (Cons x xs) = Cons (App f x) (Map f xs) type family Foldl f z l type instance Foldl f z Null = z type instance Foldl f z (Cons x xs) = Foldl f (App2 f z x) xs