Próbowałem użyć aktualizacji rekordu dla rekordu egzystencjalnego, gdy wystąpił błąd. Szybki google doprowadził mnie do feature request #2595, który pokazuje go jako zaimplementowany dla GHC w wersji 6.8.3. Używam 6.10.4, tak że myślę, że to powinno działać, ale przykładowy kod z żądania cecha:Haskell: Aktualizacja rekordu dla typów egzystencjalnych
{-# 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 }
uzyskując te same błędy jak skarżył się we wniosku cecha:
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}
Czy w pewnym momencie została ona świadomie upuszczona, czy też powinienem zgłosić zgłoszenie błędu?
Ah. Dziękuję za uratowanie mnie przed popełnieniem głupiego błędu, zakładając, że powinien on zostać naprawiony w mojej wersji. Off, aby przejść do aktualizacji GHC! – rampion
Ah, nowy i inny komunikat o błędzie, tak jak powiedziałeś. Ale taki, który myśli, że robię coś złego, nie, że to niemożliwe. – rampion