模式匹配函数应用程序中的模式匹配?

时间:2018-01-20 01:02:37

标签: haskell

我希望对函数应用程序返回的值进行模式匹配。例如:

如果我有一个Map并且我希望替换该地图中的某个键,那么我有更好的选择:

f map k = case map !? k of
            Just _  -> foo
            Nothing -> bar

在这种特殊情况下,我可以轻松使用member并保护,如:

f map k | member k map = foo
        | otherwise    = bar

但在某些情况下更愿意使用模式匹配。

1 个答案:

答案 0 :(得分:1)

您的第一个示例 使用模式匹配,但只是在case表达式中。但我认为您正在寻找的是ViewPatterns扩展名,它可用于消除样板(特别是在case表达式中,您可以同时使用模式匹配和保护)

{-# LANGUAGE ViewPatterns #-}
f k ((!? k)-> Just _) = foo
f _ _ = bar

请注意,您需要切换参数的顺序,以便k位于seconds参数的视图模式的范围内。

但我不认为这比第一版f更好。