J'essayais d'utiliser la mise à jour d'enregistrement pour un enregistrement existentiel lorsque j'ai rencontré une erreur. Un rapide google m'a conduit à feature request #2595, qui le montre comme implémenté pour GHC dans la version 6.8.3. J'utilise 6.10.4, donc je pense que cela devrait fonctionner, mais le code exemple de la demande de fonctionnalité:Haskell: Mise à jour d'enregistrement pour les types existentiels
{-# 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 }
donnent les mêmes erreurs que dénoncées dans la demande de fonctionnalité:
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}
Était-ce une fonctionnalité consciemment abandonnée à un moment donné, ou devrais-je déposer un rapport de bogue?
Ah. Merci de m'avoir sauvé de faire une erreur stupide en supposant qu'il devrait être corrigé dans ma version. Off pour aller mettre à jour GHC! – rampion
Ah, nouveau et différent message d'erreur, comme vous l'avez dit. Mais celui qui pense que je fais quelque chose de mal, pas que c'est impossible. – rampion