Ich habe versucht, Datensatzaktualisierung für einen existenziellen Datensatz zu verwenden, wenn ich auf einen Fehler stieß. Eine schnelle Google führte mich zu feature request #2595, die es als implementiert für GHC zurück in Version 6.8.3 zeigt. Ich verwende 6.10.4, also denke ich, würde es sollte funktionieren, aber der Beispiel-Code aus der Feature-Anfrage:Haskell: Datensatzaktualisierung für Existential-Typen
{-# 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 }
ergibt die gleichen Fehler wie die in der Feature-Anfrage klagte:
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}
War das irgendwann ein bewusst fallen gelassenes Feature, oder sollte ich einen Fehlerbericht einreichen?
Ah. Danke, dass du mich davor bewahrt hast, einen dummen Fehler zu machen, indem ich annehme, dass es in meiner Version behoben werden sollte. Aus, um GHC zu aktualisieren! – rampion
Ah, neue und andere Fehlermeldung, genau wie du gesagt hast. Aber jemand, der denkt, dass ich etwas falsch mache, nicht dass es unmöglich ist. – rampion