Принтер в Haskell для Subst в Data.Comp.Variables - PullRequest
0 голосов
/ 17 июня 2019

У меня есть функция, которая возвращает Subst, определенный в этой библиотеке: http://hackage.haskell.org/package/compdata-0.1/docs/Data-Comp-Variables.html#t:Subst

Я пытаюсь напечатать возвращаемое значение. Принтер должен отображать сопоставление переменных с терминами.

Когда я пытаюсь распечатать результат, я получаю:

  • No instance for (Show (Cxt NoHole CTypeF ()))
        arising from a use of ‘print’
  • In the expression: (print subst)

Я думаю, это означает, что я должен реализовать принтер. Я знаю, что когда это пользовательский класс, я могу делать «вывод шоу». Может ли кто-нибудь указать, как мне следует распечатать это?

Кроме того, это моя структура CTypeF.

data CTypeF a 
    = CVarF Int 
    | CArrF a a
    | CIntF
    | CBoolF
    deriving (Eq, Data, Functor, Foldable, Traversable, Show)

Это выводит шоу, поэтому я не думаю, что проблема здесь.

1 Ответ

2 голосов
/ 17 июня 2019

Cxt имеет экземпляр Show, но для его параметра f требуется экземпляр ShowF.

(Functor f, ShowF f, Show a) => Show (Cxt h f a)

Так что вам нужно, чтобы CTypeF имел экземпляр ShowF. Для этого вы можете использовать makeShowF с шаблоном Haskell.

$(makeShowF ''CTypeF)
...