{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}

module Data.Vinyl.TyFun where

data TyFun :: * -> * -> *
type family App (f :: TyFun k l -> *) (a :: k) :: l

data TC :: (k -> *) -> TyFun k * -> *
type instance App (TC t) x = t x
type f $ x = App f x