Какого черта здесь происходит:не могли бы соответствовать рода `* 'против' #'
"Couldn't match kind `*' against `#'"
Я пытался следующее GHCi с помощью TemplateHaskell (ghci -XTemplateHaskell
)
$(reify ''Show >>= dataToExpQ (const Nothing))
I надеялся получить Exp
из этого (у которого есть экземпляр Show). Я делаю это, чтобы вставить информацию о типах haskell в приложение, чтобы она была доступна как фактические данные, а не как строка.
Моя цель заключается в следующем:
info :: Info
info = $(reify ''Show >>= dataToExpQ (const Nothing))
Я действительно не понимаю, что сообщение об ошибке, что «#» в любом случае? Если есть #
, есть ли также # -> #
или * -> #
? Это что-то, что относится к видам вроде видов, относящихся к типам (хотя я бы не знал, что это может быть)?
Хорошо, так что я теперь понимаю, что GHC имеет иерархию видов и что `#» это особый вид Unboxed типов. Все хорошо и хорошо, но почему эта ошибка появляется? Возможно, распакованные типы не хорошо работают с genercis?
Я не совсем уверен, что это имеет смысл для меня еще, так как я считаю, что unboxed types является оптимизацией, выполняемой компилятором. Я также подумал, что если экземпляр Data существует, он должен быть там для всех типов, которые могут быть включены в структуру данных.
При дальнейших расследованиях я считаю, что Names представляет проблему, есть ли способ обойти их в dataToExpQ? Как использовать этот аргумент в любом случае?
'#' - это тип распакованных типов, см. Http://stackoverflow.com/a/3034295/700253 – Vitus
спасибо за подсказку. так: как решить проблему :-)? – scravy