В haskell, объединяя «case» и «>> =»

У меня много кода стиля:

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

Можно ли объединить строки "x <- ..." и "case x of", чтобы исключить необходимость в переменной?

7 голосов | спросил qrest 4 AM000000100000001031 2010, 10:40:10

3 ответа


0

Вы можете использовать оператор связывания >>= для передачи 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"
ответил Ionuț G. Stan 4 AM000000110000004331 2010, 11:50:43
0

Я делаю это как

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

main = foo =<< getSomething

Хорошая вещь в этом подходе состоит в том, что если foo чист, то это становится

main = foo <$> getSomething

Таким образом, код сохраняет ту же форму для несколько разных обстоятельств.

ответил Anthony 4 PM000000100000005731 2010, 22:31:57
0

Если вы хотите что-то очень близкое к

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

Тогда я думаю, что вам просто не повезло - в Haskell такого синтаксиса нет. Но знайте, что вы не одиноки. Марк Джонс определил язык Habit для включения своего рода монадического регистра в синтаксис:

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

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

ответил Thomas M. DuBuisson 5 PM00000090000000031 2010, 21:39:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132