Транспортируемый с GHC 7.10
Следующий код работает в 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?
Ответы
Ответ 1
В коде нет ничего плохого.
Ошибка связана с ошибкой в контролере типов. Трекер проблемы говорит, что это будет исправлено в GHC 7.11.
Проводя просто, чтобы предоставить ответ, так как автор не публикует его. Не стесняйтесь добавлять детали, если хотите (и можете).