我希望对函数应用程序返回的值进行模式匹配。例如:
如果我有一个Map
并且我希望替换该地图中的某个键,那么我有更好的选择:
f map k = case map !? k of
Just _ -> foo
Nothing -> bar
在这种特殊情况下,我可以轻松使用member
并保护,如:
f map k | member k map = foo
| otherwise = bar
但在某些情况下更愿意使用模式匹配。
答案 0 :(得分:1)
您的第一个示例 使用模式匹配,但只是在case
表达式中。但我认为您正在寻找的是ViewPatterns
扩展名,它可用于消除样板(特别是在case
表达式中,您可以同时使用模式匹配和保护)
{-# LANGUAGE ViewPatterns #-}
f k ((!? k)-> Just _) = foo
f _ _ = bar
请注意,您需要切换参数的顺序,以便k
位于seconds参数的视图模式的范围内。
但我不认为这比第一版f
更好。