Подтвердить что ты не робот

Использование охранников в let.. в выражениях

Иногда я пишу код, подобный этому

solveLogic :: Int -> Int -> Int
solveLogic a b =
    let 
        x = 1
        brainiac
            | a >= x     = 1
            | a == b     = 333
            | otherwise  = 5
    in
        brainiac

И каждый раз, когда я хочу писать это без ненужной функции "brainiac", вот так:

solveLogic :: Int -> Int -> Int
solveLogic a b =
    let 
        x = 1
    in
        | a >= x     = 1
        | a == b     = 333
        | otherwise  = 5

Какой код намного больше "Haskellish". Есть ли способ сделать это?

4b9b3361

Ответ 1

Да, используя предложение where:

solveLogic a b
        | a >= x     = 1
        | a == b     = 333
        | otherwise  = 5
    where
      x = 1

Ответ 2

Когда я хочу охранников как выражение, я использую этот несколько уродливый хак

case () of
_ | a >= x     -> 1
  | a == b     -> 333
  | otherwise  -> 5