{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Database.PostgreSQL.Tx.HEnv
  ( HEnv(Nil, Cons)
  , singleton
  , fromTuple
  ) where

import Database.PostgreSQL.Tx (TxEnv(lookupTxEnv))

-- | Glorified hlist used to construct ad hoc @tx@ runtime environments.
data family HEnv (l :: [*])
data instance HEnv '[] = Nil
data instance HEnv (x ': xs) = x `Cons` HEnv xs
infixr 2 `Cons`

-- | Construct an 'HEnv' containing a single value.
--
-- @since 0.2.0.0
singleton :: a -> HEnv '[a]
singleton :: a -> HEnv '[a]
singleton = (a -> HEnv '[] -> HEnv '[a]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil)

-- | 'TxEnv' instance for 'HEnv'; selects the first @a@ in the 'HEnv'
-- and makes it available via the runtime environment.
--
-- @since 0.2.0.0
instance (Select a xs) => TxEnv a (HEnv xs) where
  lookupTxEnv :: HEnv xs -> a
lookupTxEnv = HEnv xs -> a
forall a (xs :: [*]). Select a xs => HEnv xs -> a
select

-- | Internal type class for selecting the first @a@ in an 'HEnv'.
class Select a xs where
  select :: HEnv xs -> a

instance Select a (a ': xs) where
  select :: HEnv (a : xs) -> a
select (a `Cons` _) = a
a

instance {-# OVERLAPPABLE #-} (Select a xs) => Select a (x ': xs) where
  select :: HEnv (x : xs) -> a
select (_ `Cons` xs) = HEnv xs -> a
forall a (xs :: [*]). Select a xs => HEnv xs -> a
select HEnv xs
xs

-- | Internal type class for constructing an 'HEnv' from a tuple.
class FromTuple i o | i -> o where

  -- | Construct an 'HEnv' from the given tuple @i@.
  -- Instances support tuples of up to 16 elements.
  --
  -- @since 0.2.0.0
  fromTuple :: i -> HEnv o

instance FromTuple (x1, x2) '[x1, x2] where fromTuple :: (x1, x2) -> HEnv '[x1, x2]
fromTuple (x1
x1, x2
x2) = x1
x1 x1 -> HEnv '[x2] -> HEnv '[x1, x2]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[] -> HEnv '[x2]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3) '[x1, x2, x3] where fromTuple :: (x1, x2, x3) -> HEnv '[x1, x2, x3]
fromTuple (x1
x1, x2
x2, x3
x3) = x1
x1 x1 -> HEnv '[x2, x3] -> HEnv '[x1, x2, x3]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[x3] -> HEnv '[x2, x3]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[] -> HEnv '[x3]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4) '[x1, x2, x3, x4] where fromTuple :: (x1, x2, x3, x4) -> HEnv '[x1, x2, x3, x4]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4) = x1
x1 x1 -> HEnv '[x2, x3, x4] -> HEnv '[x1, x2, x3, x4]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[x3, x4] -> HEnv '[x2, x3, x4]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[x4] -> HEnv '[x3, x4]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[] -> HEnv '[x4]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5) '[x1, x2, x3, x4, x5] where fromTuple :: (x1, x2, x3, x4, x5) -> HEnv '[x1, x2, x3, x4, x5]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5) = x1
x1 x1 -> HEnv '[x2, x3, x4, x5] -> HEnv '[x1, x2, x3, x4, x5]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[x3, x4, x5] -> HEnv '[x2, x3, x4, x5]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[x4, x5] -> HEnv '[x3, x4, x5]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[x5] -> HEnv '[x4, x5]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5 -> HEnv '[] -> HEnv '[x5]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6) '[x1, x2, x3, x4, x5, x6] where fromTuple :: (x1, x2, x3, x4, x5, x6) -> HEnv '[x1, x2, x3, x4, x5, x6]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6) = x1
x1 x1 -> HEnv '[x2, x3, x4, x5, x6] -> HEnv '[x1, x2, x3, x4, x5, x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[x3, x4, x5, x6] -> HEnv '[x2, x3, x4, x5, x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[x4, x5, x6] -> HEnv '[x3, x4, x5, x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[x5, x6] -> HEnv '[x4, x5, x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5 -> HEnv '[x6] -> HEnv '[x5, x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6 -> HEnv '[] -> HEnv '[x6]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7) '[x1, x2, x3, x4, x5, x6, x7] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7) -> HEnv '[x1, x2, x3, x4, x5, x6, x7]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2 -> HEnv '[x3, x4, x5, x6, x7] -> HEnv '[x2, x3, x4, x5, x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[x4, x5, x6, x7] -> HEnv '[x3, x4, x5, x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[x5, x6, x7] -> HEnv '[x4, x5, x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5 -> HEnv '[x6, x7] -> HEnv '[x5, x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6 -> HEnv '[x7] -> HEnv '[x6, x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7 -> HEnv '[] -> HEnv '[x7]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8) '[x1, x2, x3, x4, x5, x6, x7, x8] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3 -> HEnv '[x4, x5, x6, x7, x8] -> HEnv '[x3, x4, x5, x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[x5, x6, x7, x8] -> HEnv '[x4, x5, x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5 -> HEnv '[x6, x7, x8] -> HEnv '[x5, x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6 -> HEnv '[x7, x8] -> HEnv '[x6, x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7 -> HEnv '[x8] -> HEnv '[x7, x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8 -> HEnv '[] -> HEnv '[x8]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9) '[x1, x2, x3, x4, x5, x6, x7, x8, x9] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4 -> HEnv '[x5, x6, x7, x8, x9] -> HEnv '[x4, x5, x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5 -> HEnv '[x6, x7, x8, x9] -> HEnv '[x5, x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6 -> HEnv '[x7, x8, x9] -> HEnv '[x6, x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7 -> HEnv '[x8, x9] -> HEnv '[x7, x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8 -> HEnv '[x9] -> HEnv '[x8, x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9 -> HEnv '[] -> HEnv '[x9]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10] -> HEnv '[x5, x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6 -> HEnv '[x7, x8, x9, x10] -> HEnv '[x6, x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7 -> HEnv '[x8, x9, x10] -> HEnv '[x7, x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8 -> HEnv '[x9, x10] -> HEnv '[x8, x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9 -> HEnv '[x10] -> HEnv '[x9, x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10 -> HEnv '[] -> HEnv '[x10]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11] -> HEnv '[x6, x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7 -> HEnv '[x8, x9, x10, x11] -> HEnv '[x7, x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8 -> HEnv '[x9, x10, x11] -> HEnv '[x8, x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9 -> HEnv '[x10, x11] -> HEnv '[x9, x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10 -> HEnv '[x11] -> HEnv '[x10, x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11 -> HEnv '[] -> HEnv '[x11]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11, x12
x12) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11, x12]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11, x12]
-> HEnv '[x6, x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7
-> HEnv '[x8, x9, x10, x11, x12]
-> HEnv '[x7, x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8 -> HEnv '[x9, x10, x11, x12] -> HEnv '[x8, x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9 -> HEnv '[x10, x11, x12] -> HEnv '[x9, x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10 -> HEnv '[x11, x12] -> HEnv '[x10, x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11 -> HEnv '[x12] -> HEnv '[x11, x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x12
x12 x12 -> HEnv '[] -> HEnv '[x12]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11, x12
x12, x13
x13) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11, x12, x13]
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7
-> HEnv '[x8, x9, x10, x11, x12, x13]
-> HEnv '[x7, x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8
-> HEnv '[x9, x10, x11, x12, x13]
-> HEnv '[x8, x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9 -> HEnv '[x10, x11, x12, x13] -> HEnv '[x9, x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10 -> HEnv '[x11, x12, x13] -> HEnv '[x10, x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11 -> HEnv '[x12, x13] -> HEnv '[x11, x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x12
x12 x12 -> HEnv '[x13] -> HEnv '[x12, x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x13
x13 x13 -> HEnv '[] -> HEnv '[x13]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11, x12
x12, x13
x13, x14
x14) = x1
x1 x1
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7
-> HEnv '[x8, x9, x10, x11, x12, x13, x14]
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8
-> HEnv '[x9, x10, x11, x12, x13, x14]
-> HEnv '[x8, x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9
-> HEnv '[x10, x11, x12, x13, x14]
-> HEnv '[x9, x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10
-> HEnv '[x11, x12, x13, x14] -> HEnv '[x10, x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11 -> HEnv '[x12, x13, x14] -> HEnv '[x11, x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x12
x12 x12 -> HEnv '[x13, x14] -> HEnv '[x12, x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x13
x13 x13 -> HEnv '[x14] -> HEnv '[x13, x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x14
x14 x14 -> HEnv '[] -> HEnv '[x14]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11, x12
x12, x13
x13, x14
x14, x15
x15) = x1
x1 x1
-> HEnv
     '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv
     '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7
-> HEnv '[x8, x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8
-> HEnv '[x9, x10, x11, x12, x13, x14, x15]
-> HEnv '[x8, x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9
-> HEnv '[x10, x11, x12, x13, x14, x15]
-> HEnv '[x9, x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10
-> HEnv '[x11, x12, x13, x14, x15]
-> HEnv '[x10, x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11
-> HEnv '[x12, x13, x14, x15] -> HEnv '[x11, x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x12
x12 x12 -> HEnv '[x13, x14, x15] -> HEnv '[x12, x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x13
x13 x13 -> HEnv '[x14, x15] -> HEnv '[x13, x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x14
x14 x14 -> HEnv '[x15] -> HEnv '[x14, x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x15
x15 x15 -> HEnv '[] -> HEnv '[x15]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
instance FromTuple (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16] where fromTuple :: (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
 x16)
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
       x16]
fromTuple (x1
x1, x2
x2, x3
x3, x4
x4, x5
x5, x6
x6, x7
x7, x8
x8, x9
x9, x10
x10, x11
x11, x12
x12, x13
x13, x14
x14, x15
x15, x16
x16) = x1
x1 x1
-> HEnv
     '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
       x16]
-> HEnv
     '[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
       x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x2
x2 x2
-> HEnv
     '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv
     '[x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
       x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x3
x3 x3
-> HEnv
     '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv
     '[x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x4
x4 x4
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv
     '[x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x5
x5 x5
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv '[x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x6
x6 x6
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv '[x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x7
x7 x7
-> HEnv '[x8, x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv '[x7, x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x8
x8 x8
-> HEnv '[x9, x10, x11, x12, x13, x14, x15, x16]
-> HEnv '[x8, x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x9
x9 x9
-> HEnv '[x10, x11, x12, x13, x14, x15, x16]
-> HEnv '[x9, x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x10
x10 x10
-> HEnv '[x11, x12, x13, x14, x15, x16]
-> HEnv '[x10, x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x11
x11 x11
-> HEnv '[x12, x13, x14, x15, x16]
-> HEnv '[x11, x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x12
x12 x12
-> HEnv '[x13, x14, x15, x16] -> HEnv '[x12, x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x13
x13 x13 -> HEnv '[x14, x15, x16] -> HEnv '[x13, x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x14
x14 x14 -> HEnv '[x15, x16] -> HEnv '[x14, x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x15
x15 x15 -> HEnv '[x16] -> HEnv '[x15, x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` x16
x16 x16 -> HEnv '[] -> HEnv '[x16]
forall x (xs :: [*]). x -> HEnv xs -> HEnv (x : xs)
`Cons` HEnv '[]
Nil
{- Instances above generated with:
import Data.List
main = do
  flip mapM_ [2..16] $ \i -> do
    let args = flip map [1..i] $ \j -> "x" ++ show j
    let commaSep = intercalate ", " args
    putStrLn $ concat
      [ "instance Mk ("
      , commaSep
      , ") '["
      , commaSep
      , "] where mk ("
      , commaSep
      , ") = "
      , intercalate " `Cons` " (args ++ ["Nil"])
      ]
-}