Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 使用when/除非而不保存一元操作的结果_Haskell - Fatal编程技术网

Haskell 使用when/除非而不保存一元操作的结果

Haskell 使用when/除非而不保存一元操作的结果,haskell,Haskell,有没有一种不用变量x的方法来写这个 foo = do x <- checker bar when x dostuff 但显然没有第二种病例模式。在对照组.Monad.Extra中,查看whenM。举个例子,那就是: foo = whenM (checker bar) doStuff 下面是一个较长的示例,仅向您展示如何在whenM结构中使用多个语句 foo = do doStuff1 doStuff2 whenM (checker bar) $ do doS

有没有一种不用变量
x
的方法来写这个

foo = do
  x <- checker bar
  when x dostuff

但显然没有第二种病例模式。

对照组.Monad.Extra
中,查看
whenM
。举个例子,那就是:

foo = whenM (checker bar) doStuff
下面是一个较长的示例,仅向您展示如何在
whenM
结构中使用多个语句

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

最直接的答案是手工对
do
进行去语法处理,然后看看是否可以编写一些等效但更漂亮的代码。您的
do
除砂器:

checker bar >>= \x -> when x dostuff
因此,答案必须看起来像
checker bar>=f
,其中
f
相当于

\x -> when x dostuff
嗯,这很像在时部分应用
,对吗?除了要提供第二个参数而不是第一个参数外,您需要
flip
it:

checker bar >>= flip when dostuff
checker bar >>= flip when dostuff