В haskell, комбинируя “случай” и “>> =”

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

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

Какой-либо способ того, что я объединялся "x <-..." и "случай x" строк для избавления от необходимости переменную?

7
задан qrest 4 August 2010 в 06:40
поделиться

3 ответа

Вы можете использовать оператор связывания >> = , чтобы передать по конвейеру 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"
6
ответ дан 7 December 2019 в 09:55
поделиться

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

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

main = foo =<< getSomething

. Хорошая особенность этого подхода заключается в том, что если foo является чистым, то это становится

main = foo <$> getSomething

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

0
ответ дан 7 December 2019 в 09:55
поделиться

Если вам нужно что-то очень близкое к:

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

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

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

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

0
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

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