2012-02-27 12 views
13

Sembra che Haskell abbia stabilito diverse convenzioni di denominazione attorno alle monadi.Quali sono tutte le convenzioni di denominazione monade?

Esempi:

  • allegate T al fine di ottenere il nome del trasformatore Monade (es Reader ->ReaderT)
  • utilizzando runXXX per eseguire un calcolo monade (es runST, runReader)
  • liftXXX per vari valori di XXX

Esistono altre convenzioni di denominazione?

risposta

13
  • runX m dove m :: X a verrà eseguito il X Monade e restituire il "effetto collaterale", insieme con il risultato Monade, a.

  • evalX m eseguirà il calcolo e restituirà il risultato, a.

  • execX m eseguirà il calcolo e restituirà "l'effetto collaterale" ma non il risultato.

  • Gli ascensori sono disponibili in vari gusti che possono essere un po 'complicati per me per volerli spiegare in una risposta SO. Probabilmente dovresti conoscere lift e liftIO ed essere a conoscenza di/eventualmente cercare le altre varianti come liftWith e liftBaseWith. Vedi, per esempio, la pubblicazione di EZYang sull'argomento.

  • in aggiunta a T dopo che il nome monade implica il trasformatore. Aggiungendo un M dopo che il nome di una funzione implica che è monadico. L'aggiunta di un _ implica che il risultato sia ignorato.

  • Tutte le altre lettere suffisso indicano "usa hoogle".

+7

Come un breve addendum http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#g:2 descrive alcune delle convenzioni di denominazione con combinatore riguarda quando il suffisso M in contrapposizione al prefisso m è appropriato. –

Problemi correlati