2015-07-07 12 views

risposta

10

La risposta più semplice è quello di desugar il do a mano, e poi vedere se è possibile scrivere del codice che è equivalente ma più bella. I suoi do desugars a:

checker bar >>= \x -> when x dostuff 

Quindi, la risposta dovrà assomigliare checker bar >>= f, dove f è equivalente a

\x -> when x dostuff 

Beh, questo è un po 'come l'applicazione parzialmente when, giusto? Tranne che si desidera fornire il secondo argomento anziché il primo, quindi è necessario flip:

checker bar >>= flip when dostuff 
15

In Control.Monad.Extra, controllare whenM. Per il vostro esempio, che sarebbe:

foo = whenM (checker bar) doStuff 

Ecco un esempio più lungo, solo per mostrare come le dichiarazioni nel whenM struttura multipla.

foo = do 
    doStuff1 
    doStuff2 
    whenM (checker bar) $ do 
    doStuff3 
    doStuff4 
    doStuff5 
    doStuff6 
Problemi correlati