异构列表是为ghc 7.6的新依赖类型工具提供的示例之一:
data HList :: [*] -> * where
HNil :: HList '[]
HCons:: a -> HList t -> HList (a ': t)
Run Code Online (Sandbox Code Playgroud)
示例列表"li"编译正常:
li = HCons "Int: " (HCons 234 (HCons "Integer: " (HCons 129877645 HNil)))
Run Code Online (Sandbox Code Playgroud)
显然我们希望HList在Show类中,但我只能提出以下使用相互递归约束(超类)的工作类实例化:
instance Show (HList '[]) where
show HNil = "[]"
instance (Show a, Show' (HList t)) => Show (HList (a ': t)) where
show l = "[" ++ show' l ++ "]"
class Show' a where
show' :: a -> String
instance Show' …Run Code Online (Sandbox Code Playgroud)