sydtest-0.0.0.0: src/Test/Syd/HList.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
module Test.Syd.HList where
import Data.Kind
data HList (r :: [Type]) where
HNil :: HList '[]
HCons :: e -> HList l -> HList (e ': l)
class HContains (l :: [Type]) a where
getElem :: HList l -> a
instance HContains '[] () where
getElem HNil = ()
instance HContains l (HList l) where
getElem = id
instance HContains '[a] a where
getElem (HCons a _) = a
instance HContains (a ': l) a where
getElem (HCons a _) = a
instance HContains l a => HContains (b ': l) a where
getElem (HCons _ hl) = getElem hl