module Data.Vinyl.Utils.Proxy
( module Data.Vinyl.Utils.Proxy
, Proxy (..)
) where
import Data.Proxy
import Data.Vinyl
class Record (rs :: [k]) where
proxyRecord :: Rec Proxy rs
instance Record '[] where
proxyRecord = RNil
instance Record rs => Record (r ': rs) where
proxyRecord = Proxy :& proxyRecord
recPure :: forall (f :: k -> *) (rs :: [k]). Record rs => (forall (a :: k). f a) -> Rec f rs
recPure = recPure' proxyRecord
recPure' :: forall (f :: k -> *) (rs :: [k]). Rec Proxy rs -> (forall (a :: k). f a) -> Rec f rs
recPure' RNil _ = RNil
recPure' (Proxy :& ps) a = a :& recPure' ps a