以下代码适用于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中使用多态类型强制使用?
答案 0 :(得分:2)
您的代码没有任何问题。
错误是由于类型检查器中的bug造成的。问题跟踪器表示这将在GHC 7.11中修复。
发布只是为了提供答案,因为原作者没有发布一个答案。如果您愿意(并且能够),请随意添加详细信息。