我有很多风格的代码:
do
x <- getSomething
case x of
this -> ...
that -> ...
other -> ...
我将“x&lt; - ...”和“case x of”行组合在一起以消除对变量的需求?
答案 0 :(得分:6)
您可以使用绑定运算符>>=
来管道x
。
import System.Environment (getArgs)
main :: IO ()
main = getArgs >>= process
where process ["xxx"] = putStrLn "You entered xxx"
process ["yyy"] = putStrLn "You entered yyy"
process _ = putStrLn "Error"
答案 1 :(得分:0)
我这样做
foo "this" = return 2
foo "that" = return 3
main = foo =<< getSomething
这种方法的好处在于,如果foo是纯粹的,那么这就变成了
main = foo <$> getSomething
因此代码在不同情况下保持相同的形状。
答案 2 :(得分:0)
如果你想要一些非常接近的东西:
getSomething >>= caseOf
this -> expr1
that -> expr2
other -> expr3
然后我认为你只是运气不好--Haskell中没有这样的语法。但要知道你并不孤单。 Mark Jones将习惯语言定义为包含一种带有语法的monadic案例:
case<- getSomething of
Nothing -> expr1
Just x -> expr2 x
他将此称为语言定义中的“Case-From”语句。