Stavo cercando di utilizzare l'aggiornamento dei record per un record esistenziale quando ho riscontrato un errore. Un rapido google mi ha portato a feature request #2595, che lo mostra come implementato per GHC nella versione 6.8.3. Sto utilizzando 6.10.4, quindi mi piacerebbe pensare che dovrebbe funzionare, ma il codice di esempio dalla richiesta di funzionalità:Haskell: Aggiornamento record per tipi esistenziali
{-# 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 }
produrrà gli stessi errori, come lamentato nella richiesta di funzionalità:
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}
Questa funzione è stata ignorata a un certo punto oppure dovrei presentare una segnalazione di errore?
Ah. Grazie per avermi salvato facendo un errore stupido assumendo che dovrebbe essere corretto nella mia versione. Off per andare ad aggiornare GHC! – rampion
Ah, nuovo e diverso messaggio di errore, proprio come hai detto tu. Ma uno che pensa che sto facendo qualcosa di sbagliato, non che sia impossibile. – rampion