Константы в Haskell и сопоставление с образцом

Как можно определить макрос константу в Haskell? В частности, я бы хотел, чтобы следующий фрагмент выполнялся без наложения второго сопоставления с образцом.

someconstant :: Int
someconstant = 3

f :: Int -> IO ()
f someconstant = putStrLn "Arg is 3"
f _            = putStrLn "Arg is not 3"

1 ответ

Решение

Вы можете определить синоним шаблона:

{-# LANGUAGE PatternSynonyms #-}

pattern SomeConstant :: Int
pattern SomeConstant = 3

f :: Int -> IO ()
f SomeConstant = putStrLn "Arg is 3"
f _            = putStrLn "Arg is not 3"

Но также подумайте, не лучше ли сопоставить пользовательский тип варианта вместо Int,

Другие вопросы по тегам