Следующий код работает в GHC 7.8.4:
import Data.Coerce
coerceNewtype :: (Coercible (o r) (n m' r)) => [o r] -> [n m' r]
coerceNewtype = coerce
но в 7.10 я получаю ошибку:
Couldn't match representation of type ‘n m' r’ with that of ‘o r’
arising from trying to show that the representations of
‘[o r]’ and
‘[n m' r]’ are the same
Relevant role signatures: type role [] representational
Я не совсем уверен, где волшебство происходит в Data.Coerce
, но при условии, что coerce
имеет подпись (Coercible a b) => a -> b
, я думаю, что вышеприведенная функция все еще должна компилироваться в 7.10. Любые идеи, почему поведение по-другому, или как я могу использовать принудительное с полиморфными типами в 7.10?