{-# LANGUAGE CPP #-}
#ifdef LANGUAGE_DataKinds
{-# LANGUAGE DataKinds #-}
#endif
{-# LANGUAGE TypeOperators #-}
{- |
Copyright   :  (c) Andy Sonnenburg 2013
License     :  BSD3
Maintainer  :  andy22286@gmail.com
-}
module Data.Tuple.ITuple.Proxy
       ( proxyListRep
       , proxyTuple
       , reproxyHead
       , reproxyTail
       , reproxyField1
       , reproxyField2
       , reproxyField3
       , reproxyField4
       , reproxyField5
       , reproxyField6
       , reproxyField7
       , reproxyField8
       ) where

import Data.Proxy
import Data.Tuple.ITuple

proxyListRep :: ITuple t => t -> Proxy (ListRep t)
proxyListRep _ = Proxy

proxyTuple :: ITuple t => t -> Proxy (Tuple (ListRep t))
proxyTuple _ = Proxy

reproxyHead :: t (Tuple (x :| xs)) -> Proxy x
reproxyHead = reproxy

reproxyTail :: t (Tuple (x :| xs)) -> Proxy (Tuple xs)
reproxyTail = reproxy

reproxyField1 :: t a -> Proxy (Field1 a)
reproxyField1 = reproxy

reproxyField2 :: t a -> Proxy (Field2 a)
reproxyField2 = reproxy

reproxyField3 :: t a -> Proxy (Field3 a)
reproxyField3 = reproxy

reproxyField4 :: t a -> Proxy (Field4 a)
reproxyField4 = reproxy

reproxyField5 :: t a -> Proxy (Field5 a)
reproxyField5 = reproxy

reproxyField6 :: t a -> Proxy (Field6 a)
reproxyField6 = reproxy

reproxyField7 :: t a -> Proxy (Field7 a)
reproxyField7 = reproxy

reproxyField8 :: t a -> Proxy (Field8 a)
reproxyField8 = reproxy