有没有办法在没有变量的情况下写这个x?
foo = do
x <- checker bar
when x dostuff
Run Code Online (Sandbox Code Playgroud)
我在想象类似于LambdaCase的东西:
foo' = do
checker bar >>= \case
True -> dostuff
_ -> return ()
Run Code Online (Sandbox Code Playgroud)
但显然没有第二种情况模式.
mhw*_*bat 15
在Control.Monad.Extra,退房whenM.对于你的例子,那将是:
foo = whenM (checker bar) doStuff
Run Code Online (Sandbox Code Playgroud)
这是一个较长的示例,只是为了向您展示如何在whenM结构中使用多个语句.
foo = do
doStuff1
doStuff2
whenM (checker bar) $ do
doStuff3
doStuff4
doStuff5
doStuff6
Run Code Online (Sandbox Code Playgroud)
ama*_*loy 10
最直截了当的答案是do手工去除,然后看看你是否可以编写一些相当但更漂亮的代码.你的dodesugars:
checker bar >>= \x -> when x dostuff
Run Code Online (Sandbox Code Playgroud)
所以,答案必须看起来像checker bar >>= f,f相当于
\x -> when x dostuff
Run Code Online (Sandbox Code Playgroud)
嗯,这很像部分应用when,对吧?除了你想提供第二个参数而不是第一个参数,所以你需要flip它:
checker bar >>= flip when dostuff
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |