可与GHC 7.10一起强制执行

时间:2015-05-18 00:46:54

标签: haskell ghc

以下代码适用于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 个答案:

答案 0 :(得分:2)

您的代码没有任何问题。

错误是由于类型检查器中的bug造成的。问题跟踪器表示这将在GHC 7.11中修复。

发布只是为了提供答案,因为原作者没有发布一个答案。如果您愿意(并且能够),请随意添加详细信息。