indextype-0.2.1.0: src/Control/IndexT/TypeLevel.hs
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE PolyKinds #-}
{-|
Module : Control.IndexT
Copyright : Clinton Mead, 2017
License : BSD3
Maintainer : clintonmead@gmail.com
Stability : experimental
Portability : GHC
This module just has the 'Control.IndexT.IndexT' type extraction function but raised to type level
-}
module Control.IndexT.TypeLevel (
IndexT
) where
import GHC.TypeLits (Nat)
import Data.Functor.Identity (Identity(Identity))
{-|
'Control.IndexT.IndexT' on polykinded type level tuples.
Note this currently is only defined on tuples.
-}
type family IndexT (i :: Nat) (a :: k) = (r :: k')
type instance IndexT 0 ('Identity a) = a
type instance IndexT 0 '(a, _) = a
type instance IndexT 1 '(_, a) = a
type instance IndexT 0 '(a, _, _) = a
type instance IndexT 1 '(_, a, _) = a
type instance IndexT 2 '(_, _, a) = a
type instance IndexT 0 '(a, _, _, _) = a
type instance IndexT 1 '(_, a, _, _) = a
type instance IndexT 2 '(_, _, a, _) = a
type instance IndexT 3 '(_, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _) = a
type instance IndexT 3 '(_, _, _, a, _) = a
type instance IndexT 4 '(_, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _) = a
type instance IndexT 5 '(_, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 10 '(_, _, _, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 10 '(_, _, _, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 11 '(_, _, _, _, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 10 '(_, _, _, _, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 11 '(_, _, _, _, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 12 '(_, _, _, _, _, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 10 '(_, _, _, _, _, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 11 '(_, _, _, _, _, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 12 '(_, _, _, _, _, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 13 '(_, _, _, _, _, _, _, _, _, _, _, _, _, a) = a
type instance IndexT 0 '(a, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 1 '(_, a, _, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 2 '(_, _, a, _, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 3 '(_, _, _, a, _, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 4 '(_, _, _, _, a, _, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 5 '(_, _, _, _, _, a, _, _, _, _, _, _, _, _, _) = a
type instance IndexT 6 '(_, _, _, _, _, _, a, _, _, _, _, _, _, _, _) = a
type instance IndexT 7 '(_, _, _, _, _, _, _, a, _, _, _, _, _, _, _) = a
type instance IndexT 8 '(_, _, _, _, _, _, _, _, a, _, _, _, _, _, _) = a
type instance IndexT 9 '(_, _, _, _, _, _, _, _, _, a, _, _, _, _, _) = a
type instance IndexT 10 '(_, _, _, _, _, _, _, _, _, _, a, _, _, _, _) = a
type instance IndexT 11 '(_, _, _, _, _, _, _, _, _, _, _, a, _, _, _) = a
type instance IndexT 12 '(_, _, _, _, _, _, _, _, _, _, _, _, a, _, _) = a
type instance IndexT 13 '(_, _, _, _, _, _, _, _, _, _, _, _, _, a, _) = a
type instance IndexT 14 '(_, _, _, _, _, _, _, _, _, _, _, _, _, _, a) = a