Константы в 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
,