Я пытался использовать обновление записи для экзистенциальной записи, когда обнаружил ошибку. Быстрый поиск в 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}
Была ли эта функция в какой-то момент сознательно отброшена, или мне следует отправить отчет об ошибке ?