2012-02-13 9 views

risposta

10

È possibile risolvere questo problema cercando la spia flatMap nello API index. Dà:

FilterMonadic 
Stream 
StreamWithFilter 
TraversableMethods 
Iterator 
ParIterableLike 
ParIterableLike 
ParIterableViewLike 
TraversableLike 
WithFilter 
MonadOps 
TraversableProxyLike 
TraversableViewLike 
LeftProjection 
RightProjection 
Option 
WithFilter 
Responder 
Zipped 
ControlContext 
Parser 
12

La risposta di Luigi è corretta, ma non molto informativa, IMHO.

Tutte le raccolte possono implementare l'interfaccia di monad, ma la firma per flatMap in esse non è una flatmap di monade. Però si comportano come monadi la maggior parte del tempo. Quasi tutte le classi elencate da Luigi sono legate alle collezioni.

LeftProject e RightProject si riferisce a Either. Fondamentalmente, Either non è una monade, ma se si "proietta" uno dei lati, allora quella parte si comporta come una monade Option.

Parser è una monade, che costituisce la base dei combinatori di parser.

Ammetto che non riconosco ControlContext. Mi chiedo se sia legato alle continuazioni (che sono anche le monadi).

+1

Cosa intendete con "la firma per flatMap in essi non è la flatMap di un monade"? Ti riferisci al macchinario implicito? – paradigmatic

+1

@paradigmatic, sì. Vedi il Tony Morris rant [qui] (http://stackoverflow.com/questions/1722726/is-the-scala-2-8-collections-library-a-case-of-the-longest-suicide-note-in -hist/1735694 # 1735694). – missingfaktor

1

Qui ci sono i link ai tre file Sources da Scalaz:

Date un'occhiata a dichiarazioni di istanza. Questo potrebbe darti un'idea di quali tipi dalla libreria standard soddisfano l'interfaccia monadica.

+1

OP non si riferisce a scalaz –

Problemi correlati