2010-08-04 55 views
7

我有很多風格的代碼:在Haskell,結合「案例」和「>> =」

do 
    x <- getSomething 
    case x of 
    this -> ... 
    that -> ... 
    other -> ... 

我的任何方式相結合的「X < - ...」和「案件「消除對變量的需求?

+4

我希望'case'是'\ x - > case x of'的簡寫。 – dave4420 2010-08-04 12:08:53

回答

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" 
0

我這樣做,因爲

foo "this" = return 2 
foo "that" = return 3 

main = foo =<< getSomething 

這種方法的好處是,如果foo是純那麼這將成爲

main = foo <$> getSomething 

因此,代碼保留相同的形狀有所改變情況。

0

如果你想非常接近的東西:

getSomething >>= caseOf 
    this -> expr1 
    that -> expr2 
    other -> expr3 

那麼我認爲你只是運氣不好 - 有在Haskell沒有這樣的語法。但知道你並不孤單。馬克·瓊斯定義的習慣語言,包括一種一元情況下的語法:

case<- getSomething of 
    Nothing -> expr1 
    Just x -> expr2 x 

他指這是一個「案例從」在語言定義語句。