Транспортируемый с 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.


Проводя просто, чтобы предоставить ответ, так как автор не публикует его. Не стесняйтесь добавлять детали, если хотите (и можете).