Questa è una domanda di stile di codifica piuttosto che una tecnica.Denominazione dei conflitti tra i valori dei campi e l'ambito locale in Haskell
Ho riscontrato spesso un problema in cui utilizzo la sintassi del record (meno che ottimale) di haskell (o gli obiettivi, il problema finisce lo stesso) per creare un tipo data
. Finisco con le funzioni di accesso al campo che prendono il nome dai miei campi. Essendo un programmatore coscienzioso, cerco di rendere significativi i miei nomi dei campi dei record.
A un certo punto più tardi ho bisogno di ottenere un campo dal mio tipo e mantenere il suo valore in una variabile locale. Questo è spesso fatto all'interno di una StateMonad in un blocco do
. La domanda è che cosa chiamo la variabile locale. Il nome più ovvio è già preso come accesso al campo. Trovo me stesso usando le abbreviazioni che tendono a rendere il mio codice meno leggibile.
Esiste una convenzione di codifica Haskell che risolva questo problema?
Esempio
data Qaax = Qaax {
foo :: SomeFoo
, bar :: SomeBar
, ...
}
baz :: (MonadState Qaax m) => (...) -> m()
baz (...) = do
f <- gets foo -- I'd really like to use something more descriptive then
-- `f` but `foo` is already taken.
...
return()