あなたの質問はかなり曖昧です。私が正しく解釈した場合、あなたはのデフォルトShow
インスタンスを変更しようとしています[SimpleRecord]
。
が定義されている場合、GHCはすでにインスタンスを定義しているShow [a]
ためShow 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ドキュメントをご覧ください。
タイプのデザインについてのコメントです。タイプを次のように定義することをお勧めします。
data SimpleRecord = SimpleRecord String String Integer
ここでは、部分的なコンストラクターアプリケーションなどの点でより柔軟性があります。