Ниже не компилируется:Template Haskell объявления данных, которые получают Показать
import Language.Haskell.TH
makeAlpha n = [d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
Я не могу понять, что означает, что ошибка у всех:
Can't derive instances where the instance context mentions
type variables that are not data type parameters
Offending constraint: Show t_d
When deriving the instance for (Show Alpha)
In the Template Haskell quotation
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
In the expression:
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
Можно ли делать выкладки как это?
Я думаю, проблема может заключаться в том, что она пытается получить экземпляры до того, как она получит * n *; т. е. пытается расширить ваш сплайсинг, чтобы содержать экземпляры, но не может, потому что не знает, как выглядит '$ (conT n)'. Не уверен. – ehird
Я так же думал, но я часто не могу быть уверен, что разрешено, а не с Template Haskell ... В этом сценарии я думаю, что очевидно, что он еще не может получить экземпляры, и ему нужно дождаться использования функции для расширения , Это ошибка? – Ana
Хм, подождите, не должно быть 'data Alpha = $ (conT n)' или что-то еще? Я думаю, что у вас сейчас есть ошибка типа, по крайней мере, от взгляда на [определение 'Dec'] (http://hackage.haskell.org/packages/archive/template-haskell/2.6.0.0/doc/html /Language-Haskell-TH-Syntax.html#t:Dec). – ehird