Haskell “哈斯克尔”;“什么也不做”;IO,或者如果没有其他
我想在Haskell做一些类似的事情:Haskell “哈斯克尔”;“什么也不做”;IO,或者如果没有其他,haskell,syntax,io,Haskell,Syntax,Io,我想在Haskell做一些类似的事情: main1 = do s <- getLine if s == "foo" then putStr "You entered foo" 这有点冗长,但如果有必要,我会接受的。不过,如果没有内置版本的nop,我会感到惊讶 或者: doIf :: Bool -> IO () -> IO () doIf b m = if b then m else nop main3 = do s <- getLine
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
这有点冗长,但如果有必要,我会接受的。不过,如果没有内置版本的nop
,我会感到惊讶
或者:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
doIf::Bool->IO()->IO()
doIf b m=如果b那么m else nop
main3=do s在monad中执行no op的最简单方法是:
return ()
相当于:
pure ()
但是,对于您正在使用的特定成语,已经为您制作了一个组合词:
import Control.Monad
main = do s <- getLine
when (s == "foo") $ putStr "You entered foo"
import-Control.Monad
main=do s可用于查找函数,在本例中:when
在Hoogle中,您可以输入类型签名,它将尝试通过统一类型和重新排序参数在标准库中查找匹配函数
在您的情况下,只需输入doIf
函数的类型:当
是这里的第三个答案时,它的反面是,除非
也在那里。哎呀,我想到了return(),但认为它实际上会返回(即,短路do表达式中的其余内容)。我的错。谢谢你的指针指向when.return,是的:)@Dave记住Haskell中的return
不是一个语言构造,它只是一个函数(正如bdonian所说,它的名称选择不当)。Return不会影响控制流,或者其他什么,您可以这样写:do{s我得到的不在范围内:`when'
fortest=do(when True(putStrLn“Hello”)
.Oops,when
需要导入控制。Monad
位于文件顶部。
import Control.Monad
main = do s <- getLine
when (s == "foo") $ putStr "You entered foo"