Haskell中的常量和模式匹配

3

如何在Haskell中定义宏常量?特别是,我希望以下代码片段可以运行而不需要第二个模式匹配重叠。

someconstant :: Int
someconstant = 3

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

您应该澄清一下,您不是在寻找一个守卫 f x | x==someconstant = putStrLn "is 3",而是您真正想要的是一个模式。 (对吗?) - chi
1个回答

13

您可以定义一个模式同义词

{-# LANGUAGE PatternSynonyms #-}

pattern SomeConstant :: Int
pattern SomeConstant = 3

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

同时考虑一下是否最好匹配自定义变量类型而不是 Int


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接