Хорошо, это немного над моей головой, так как я никогда не использовал семейства типов в Хаскеле.Однако в вашем примере на самом деле также не используются семейства типов, поэтому я подумал, что увижу, когда я уберу расширение языка TypeFamilies
из прагмы LANGUAGE
.Оказывается: это компилируется просто отлично!:)
Так что это вполне может быть ошибка GHC.
При этом я немного ткнул в нее и заметил, что следующие компоненты успешно компилируются с TypeFamilies
:
mcode = do
b
return ()
where b = a `asExprTyp` int
Это, вероятно, бессмысленно, поскольку его предполагаемый тип - mcode :: (Expr m, Monad m) => m ()
, а не просто mcode :: Monad m => m ()
, но я хочу сказать, что GHC кажется счастливым только тогда, когда тип a
каким-то образом связан с *Тип 1014 *.
Не уверен, что это полезно, но это определенно пробудило мое любопытство!