{-# language DataKinds #-} {-# language PolyKinds #-} {-# language StandaloneKindSignatures #-} {-# language TypeFamilies #-} module Rel8.FCF ( Exp, Eval , Compose ) where -- base import Data.Kind ( Type ) import Prelude () type Exp :: Type -> Type type Exp e = e -> Type type Eval :: Exp e -> e type family Eval a data Compose :: (Type -> Type) -> (Type -> Exp Type) -> Type -> Exp Type type instance Eval (Compose f g a) = f (Eval (g a))