АТД является свободной монады:Как я могу сделать это шоу Haskell ADT Show?
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
к приведет к печати строки. Это возможно?
Вам нужно использовать 'instance Free Show of ...' – beoliver
Проверьте [автономное получение] (https://wiki.haskell.org/GHC/Stand-alone_deriving_declarations) –