2011-01-02 16 views
6

エラーが発生したときに、実在するレコードのレコード更新を使用しようとしていました。速いgoogleは私にfeature request #2595に導かれました。これはバージョン6.8.3のGHC用に実装されていることを示しています。私は6.10.4を使用していますので、私はそれが動作するはずだと思うだろうが、機能要求からのコード例:機能要求に訴えてHaskell:既存タイプのレコード更新

{-# LANGUAGE ExistentialQuantification,Rank2Types #-} 
module Foo where 

data Foo = forall a . Foo { foo :: a -> a, bar :: Int } 

x :: Foo 
x = Foo { foo = id, bar = 3 } 

f :: Foo -> Foo 
f rec = rec { foo = id } 

g :: Foo -> Foo 
g rec = rec { bar = 3 } 

は同じエラーを得:

test.hs:10:8: 
    Record update for the non-Haskell-98 data type `Foo' is not (yet) supported 
    Use pattern-matching instead 
    In the expression: rec {foo = id} 
    In the definition of `f': f rec = rec {foo = id} 

test.hs:13:8: 
    Record update for the non-Haskell-98 data type `Foo' is not (yet) supported 
    Use pattern-matching instead 
    In the expression: rec {bar = 3} 
    In the definition of `g': g rec = rec {bar = 3} 

これは意識的に削除された機能ですか、またはバグレポートを提出する必要がありますか?

答えて

5

実際には、Trac伝票にはバージョン6.12で実装されていると言われています。バグはで、バージョン6.8.3ではでした。だからあなたは修正よりも古いバージョンを使用しています。

また、修正のchangelogエントリは完全に修正されていないと思われます。あなたはまだ最初のエラーを取得していますが、2番目のエラーはありません。残りの問題のバグレポートがない場合は、先に進んでください。

+2

Ah。私のバージョンで修正する必要があると仮定して、私に愚かな間違いをさせないようにしてくれてありがとう。 GHCを更新するにはオフに! – rampion

+0

あなたが言ったのと全く違った新しいエラーメッセージ。しかし、私は何かが間違っていると思っている、それは不可能ではありません。 – rampion

3

さらに別の方法があります。


あなたは

data Foo = Foo { foo :: forall a . a -> a, bar :: Int } 

data Foo = forall a . Foo { foo :: a -> a, bar :: Int } 

からのデータ型の定義を変更した場合、それはエラーなしでコンパイルされます。 - ghc-6.12.2.20100531を使用。

関連する問題