ADT は自由なモナドです:
data Free f r = Free (f (Free f r)) | Pure r
Show
作業中に印刷できるように派生させたいと思います。たとえば、次のような場合:
data T next = A next | B next deriving (Show)
aa = Free $ A $ Free $ B $ Pure ()
deriving (Show)
現時点では、Free
ADTに追加すると次のエラーが発生します。
No instance for (Show (f (Free f r)))
arising from the first field of ‘Free’ (type ‘f (Free f r)’)
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (Show (Free f r))
印刷可能な文字列にしたいと思いshow aa
ます。これは可能ですか?