{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds            #-}

module Type.Applicative (module Type.Applicative, module X) where

import Type.Functor as X
import Type.Monoid


infixl 4 <*>
type a <*> b = AppBind a b

type family AppBind a b where
            AppBind a '[] = '[]
            AppBind a (b ': bs) = AppBind' a b <> AppBind a bs

type family AppBind' a b where
            AppBind' '[]       b = '[]
            AppBind' (a ': as) b = a b ': AppBind' as b