你的问题很模棱两可。如果我解释正确,您正在尝试Show
更改[SimpleRecord]
.
由于 GHC 已经定义了实例Show [a]
whenShow a
被定义。当您尝试FlexibleInstances
再次为Show [SimpleRecord]
.
Matching instances:
instance Show a => Show [a] -- Defined in `GHC.Show'
instance Show [SimpleRecord] -- Defined at show.hs:5:11
所以你需要使用OverlappingInstances
语言扩展来允许重载它。它声明 GHC 匹配最具体的实例。
您可能还想包含FlexibleInstances
扩展,它允许在实例声明中提及任意嵌套类型。
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverlappingInstances #-}
newtype SimpleRecord = SimpleRecord ([Char], [Char], Integer)
deriving (Show)
instance Show [SimpleRecord] where
show [SimpleRecord (n, i, c)] = show (SimpleRecord (n, i, c))++"\n"
show (l:ls) = show l ++ "\n" ++ show ls
您可以在GHC Docs获得有关这些语言扩展的更多信息
只是对您的类型设计的评论,最好将您的类型定义为
data SimpleRecord = SimpleRecord String String Integer
在部分构造函数应用程序等方面,您在这里获得了更大的灵活性。