2012-05-03 13 views

risposta

38

No, non una monade, ma una comonade! Trasforma una funzione che accetta un oggetto spostato e restituisce un valore normale in una funzione che accetta e restituisce un oggetto avvolto. Come un tipo di firma Haskell che sarebbe:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b) 

La firma tipo di value è:

Wrapped a -> a 

Queste sono esattamente ciò che serve per una comonad. La prima funzione è solitamente chiamata extend e il secondo extract.

Si può pensare a una comonade come valore con qualche contesto in più. E questo è esattamente ciò che fa chain.

Vedere this Stackoverflow question per ulteriori informazioni sulle comonad.

+8

Mi piace questa risposta; Penso che sarebbe più immediatamente evidente cosa intendi se dovessi spiegare la mappatura dei metodi degli oggetti di sottolineatura sui tipi. Se ho capito bene, i metodi sono normalmente 'Wrapped a -> b's ma che' chain' restituisce un oggetto i cui metodi (eccetto 'value') sono tutti' Wrapped a -> Wrapped b's. Conosco un po 'Haskell, ma la domanda non era originariamente etichettata come Haskell, quindi le spiegazioni su come la tua risposta si adatta alla libreria JS potrebbe essere utile. – ellisbben