我有很多风格的代码:在Haskell,结合“案例”和“>> =”
do
x <- getSomething
case x of
this -> ...
that -> ...
other -> ...
我的任何方式相结合的“X < - ...”和“案件“消除对变量的需求?
我有很多风格的代码:在Haskell,结合“案例”和“>> =”
do
x <- getSomething
case x of
this -> ...
that -> ...
other -> ...
我的任何方式相结合的“X < - ...”和“案件“消除对变量的需求?
您可以使用绑定运算符>>=
来管道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"
我这样做,因为
foo "this" = return 2
foo "that" = return 3
main = foo =<< getSomething
这种方法的好处是,如果foo是纯那么这将成为
main = foo <$> getSomething
因此,代码保留相同的形状有所改变情况。
如果你想非常接近的东西:
getSomething >>= caseOf
this -> expr1
that -> expr2
other -> expr3
那么我认为你只是运气不好 - 有在Haskell没有这样的语法。但知道你并不孤单。马克·琼斯定义的习惯语言,包括一种一元情况下的语法:
case<- getSomething of
Nothing -> expr1
Just x -> expr2 x
他指这是一个“案例从”在语言定义语句。
我希望'case'是'\ x - > case x of'的简写。 – dave4420 2010-08-04 12:08:53