Haskell: Обновление записи для экзистенциальных типов

Я пытался использовать обновление записи для экзистенциальной записи, когда обнаружил ошибку. Быстрый поиск в Google привел меня к запросу функции № 2595 , который показывает, что он реализован для GHC еще в версии 6.8.3. Я использую 6.10.4, поэтому я Я думаю, что это должно сработать, но пример кода из запроса функции:

{-# 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}

Была ли эта функция в какой-то момент сознательно отброшена, или мне следует отправить отчет об ошибке ?

6
задан rampion 2 January 2011 в 20:00
поделиться