あなたの質問はかなり曖昧です。私が正しく解釈した場合、あなたはのデフォルト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
ここでは、部分的なコンストラクターアプリケーションなどの点でより柔軟性があります。