Convenzioni di denominazione per i decostruttori newtype (distruttori?)

5

Esaminando la libreria standard di Haskell possiamo vedere:

newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }

newtype WrappedMonad m a = WrapMonad { unwrapMonad :: m a }

newtype Sum a = Sum { getSum :: a }

Apparentemente, ci sono (almeno) 3 diversi prefissi usati per scartare un valore all'interno di una newtype : un - , run - e get- . (Inoltre run - e get - capitalizza la lettera successiva mentre un - non lo fa.) Questo sembra confondere.

  • Ci sono dei motivi o è solo una cosa storica?
  • Se progetto il mio newtype , quale prefisso dovrei usare e perché?
posta Petr Pudlák 12.10.2012 - 13:51
fonte

1 risposta

5

La convenzione sulla capitalizzazione è che la prima lettera di ogni parola è in maiuscolo. Quindi la "w" in "unwrap" è minuscola perché "unwrap" è una parola, cioè "unwrap [the] monad", non "un wrap [the] monad".

La ragione per cui runStateT è chiamata runStateT è che questo descrive al meglio come viene usata la funzione - è usato per eseguire / eseguire un trasformatore di stato. Non avrebbe senso chiamare gli altri decostruttori nel tuo esempio runSomething perché non sono usati per eseguire o eseguire qualsiasi cosa.

La distinzione tra get e unwrap sembra un po 'più arbitraria (almeno per i record con un solo membro), ma in questo caso penso che la parola unwrap sia stata semplicemente scelta perché si adatta bene al nome WrappedMonad .

Alla fine, direi che non è necessario scegliere un nome che segna in modo inequivocabile una funzione come distruttore, perché non è davvero rilevante. Quindi la "convenzione" per nominare i decostruttori è semplicemente scegliere quella che meglio descrive ciò che fa e come dovrebbe essere usata.

    
risposta data 12.10.2012 - 14:20
fonte

Leggi altre domande sui tag