我在为下面定义的异构列表定义 Show 实例时遇到问题:
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE FlexibleInstances #-}
import Data.Kind
data HList xs where
HNil :: HList TNil
(::^) :: a -> HList as -> HList (a :^ as)
data TypeList = TNil | (:^) Type TypeList
instance Show (HList TNil) where
show HNil = "[]"
如果 Typelist xs 中的所有类型都有一个显示实例,我想给 HList xs 一个显示实例。我想一个人应该能够写出类似的东西
instance (Show a, _) => Show (HList a :^ as) where
show (x ::^ xs) = show x ++ show xs
但我不确定要填什么洞_。
PS:如果你在 ghci 中尝试这个,不要忘记添加语言扩展
:set -XTypeInType -XTypeOperators