2010-08-04 1 views
7

У меня есть много кода стиля:В Haskell, совмещая «случай» и «>> =»

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

Любой путь меня объединение «х < - ...» и «дела х "строк, чтобы устранить необходимость в переменной?

+4

Желательно, чтобы «случай» был сокращенно для '\ x -> case x of'. – dave4420

ответ

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. Но знай, что ты не один. Марк Джонс определил язык Habit включать свой род монадических случае с синтаксисом:

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

Он относится к этому как «Case-С» заявления в определении языка.