-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple strict heterogeneous lists
--   
--   Small, concise and simple implementation of heterogeneous lists with
--   useful utility functions
@package hvect
@version 0.4.0.0

module Data.HVect

-- | Heterogeneous vector
data HVect (ts :: [*])
[HNil] :: HVect '[]
[:&:] :: !t -> !HVect ts -> HVect (t : ts)
infixr 5 :&:
empty :: HVect '[]
null :: HVect as -> Bool
head :: HVect (t : ts) -> t
tail :: HVect (t : ts) -> HVect ts
singleton :: a -> HVect '[a]
length :: HVect as -> SNat (HVectLen as)
type family HVectLen (ts :: [*]) :: Nat

-- | Find first element in <a>HVect</a> of type x
findFirst :: forall x ts n. ListContains n x ts => HVect ts -> x
type family InList (x :: *) (xs :: [*]) :: Nat
type ListContains n x ts = (SNatRep n, InList x ts ~ n, HVectIdx n ts ~ x)
type family NotInList (x :: *) (xs :: [*]) :: Bool
type family MaybeToList (a :: Maybe *) :: [*]
(!!) :: SNat n -> HVect as -> HVectIdx n as
infixl 9 !!
type family HVectIdx (n :: Nat) (ts :: [*]) :: *
type family HVectElim (ts :: [*]) (a :: *) :: *
type family Append (as :: [*]) (bs :: [*]) :: [*]
(<++>) :: HVect as -> HVect bs -> HVect (Append as bs)
infixr 5 <++>
type family ReverseLoop (as :: [*]) (bs :: [*]) :: [*]
type Reverse as = ReverseLoop as '[]
reverse :: HVect as -> HVect (Reverse as)
uncurry :: HVectElim ts a -> HVect ts -> a
data Rep (ts :: [*])
[RNil] :: Rep '[]
[RCons] :: Rep ts -> Rep (t : ts)
class HasRep (ts :: [*])
hasRep :: HasRep ts => Rep ts
curryExpl :: Rep ts -> (HVect ts -> a) -> HVectElim ts a
curry :: HasRep ts => (HVect ts -> a) -> HVectElim ts a
packExpl :: Rep ts -> (forall a. HVectElim ts a -> a) -> HVect ts
pack :: HasRep ts => (forall a. HVectElim ts a -> a) -> HVect ts
type family AllHave (c :: * -> Constraint) (xs :: [*]) :: Constraint
data Nat
[Zero] :: Nat
[Succ] :: Nat -> Nat
data SNat (n :: Nat)
[SZero] :: SNat  'Zero
[SSucc] :: SNat n -> SNat ( 'Succ n)
sNatToInt :: SNat n -> Int
intToSNat :: Int -> AnySNat
data AnySNat
[AnySNat] :: forall n. SNat n -> AnySNat
type family (m :: Nat) :< (n :: Nat) :: Bool
instance Data.HVect.HasRep '[]
instance Data.HVect.HasRep ts => Data.HVect.HasRep (t : ts)
instance Data.HVect.SNatRep 'Data.HVect.Zero
instance Data.HVect.SNatRep n => Data.HVect.SNatRep ('Data.HVect.Succ n)
instance GHC.Classes.Eq (Data.HVect.HVect '[])
instance (GHC.Classes.Eq (Data.HVect.HVect ts), GHC.Classes.Eq t) => GHC.Classes.Eq (Data.HVect.HVect (t : ts))
instance GHC.Show.Show (Data.HVect.HVect '[])
instance (GHC.Show.Show (Data.HVect.HVect ts), GHC.Show.Show t) => GHC.Show.Show (Data.HVect.HVect (t : ts))
instance GHC.Classes.Ord (Data.HVect.HVect '[])
instance (GHC.Classes.Ord (Data.HVect.HVect ts), GHC.Classes.Ord t) => GHC.Classes.Ord (Data.HVect.HVect (t : ts))
