我开始在用haskell编写代码方面有了一个不错的掌握,并且我注意到我犯过几次错误:
doFoo :: ...
doFoo pattern1 = fooHelper ...
doFoo pattern2 = fooHelper ...
where
fooHelper = ...
fooHelper
当然不在doFoo pattern1
的作用域中。我发现自己纠正了这个错误,方法是使用doFoo
的一个不可反驳的模式,然后在函数中使用case表达式进行模式匹配:
doFoo :: ...
doFoo irrefutable = case irrefutable of
pattern1 -> fooHelper ...
pattern2 -> fooHelper ...
where
fooHelper = ...
fooHelper
现在当然在两种模式的范围内。
据我所知,函数级的模式匹配在各个方面都等价于case表达式中的模式匹配(如果我说错了,请纠正我),所以这样做似乎是合理的。这种模式是否被认为是惯用的,或者有更好的(或者只是常用的替代方法)方式?
1条答案
按热度按时间nle07wnf1#
我认为在这种情况下,将其转换为case表达式是很常见的。除此之外,使用
LambdaCase
extension,您可以使其更短一些。从GHC 9.4.1开始,你甚至可以在多个参数上进行模式匹配。
而不是写
请注意,它是
\cases
,而不是\case