2013-01-05 20 views
9

La classe Monad definisce un metodo >>, quali sequenze due azioni: monadiciPerché non c'è nessun << nella libreria standard Haskell?

>> :: Monad m => m a -> m b -> m b 

L'operatore legame >>= ha un capovolte-argomento equivalente, =<<; così come gli operatori di composizione monodica ("pesci") >=> e <=<. Non sembra esserci uno <<, anche se (dopo alcuni minuti di Hoogling). Perchè è questo?

Modifica: so che non è un grosso problema. Mi piace il modo in cui certe righe di codice appaiono con gli operatori che puntano a sinistra. x <- doSomething =<< doSomethingElse sembra più bello, con le frecce che vanno tutte allo stesso modo, rispetto a x <- doSomethingElse >>= doSomething.

+0

Nessuno ha fatto un caso per questo. –

+0

Non ci hanno pensato quando hanno fatto '= <<' e '<= <'? Non so perché mi dà fastidio, sembra solo una svista. –

+0

Uh, questi esempi fanno entrambi la stessa cosa? – MathematicalOrchid

risposta

10

Per quanto ne so, non c'è una buona ragione. Nota che il tuo Monad dovrebbe anche essere un'istanza di Applicative, quindi puoi usare <* e *> come strumenti di sequenziamento.

+0

Buona idea! Grazie. –

+10

Si noti che sebbene '*>' sia equivalente a '>>', 'a <* b' NON è equivalente a' b *> a'. – dave4420

+0

@ dave4420 questo è un buon punto. 'flip (*>)' e 'flip (>>)' sono sempre un'opzione. –

Problemi correlati