Я пытаюсь реализовать рекурсивный тип данных, используя recursion-schemes
. Я хотел бы иметь возможность распечатать его.
import Data.Functor.Foldable
data T1F a = Foo deriving Show
type T1 = Fix T1F
data T2 = Bar T1 deriving Show -- error here
Сообщение об ошибке:
No instance for (Data.Functor.Classes.Show1 T1F)
arising from the first field of ‘Bar’ (type ‘T1’)
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (Show T2)
Как сделать T1
производным Show
?
Show1
дляT1F
. Написание экземпляровShow1
вручную может быть довольно утомительным. К счастью, пакетderiving-compat
поддержит вас. - person Benjamin Hodgson♦   schedule 21.03.2017Show
для вашего типа данных, просмотреть сгенерированный код путем компиляции с-ddump-deriv
, а затем вставить и адаптировать его. Однако задача не из приятных — гораздо проще использовать помощников TH в пакете! - person Benjamin Hodgson♦   schedule 27.05.2018