gpt4 book ai didi

haskell - 查看模式与模式防护

转载 作者:行者123 更新时间:2023-12-03 23:32:16 25 4
gpt4 key购买 nike

我试图了解 GHC 中的 View 模式和模式保护之间的关系。模式守卫看起来很直观,而 View 模式似乎有点困惑。看起来 View 模式更适合处理模式深处的事情,而模式守卫可以更直观地重用 View ,但我不太明白。

最佳答案

View 模式与模式保护有很大的重叠。 View 模式的主要优点是它们可以嵌套,并且避免引入中间模式变量。举个愚蠢的例子:

endpoints (sort -> begin : (reverse -> end : _)) = Just (begin, end)
endpoints _ = Nothing

模式保护等效项要求每个新 View 绑定(bind)一个新的模式变量,在评估表达式和绑定(bind)模式之间交替。
endpoints xs
| begin : sorted <- sort xs
, end : _ <- reverse sorted
= Just (begin, end)
| otherwise = Nothing

View 模式也可以只使用模式中较早绑定(bind)的那些变量,但它看起来确实不错:
nonzero :: (a -> Int) -> a -> Maybe a
nonzero f (f -> 0) = Nothing
nonzero _ x = Just x

-- nonzero (fromEnum . not . null) "123" == Just "123"
-- "" == Nothing

模式守卫的主要优点是它们是守卫的简单概括,可以包含普通的 bool 表达式。我通常更喜欢它们而不是 View 模式,因为我发现 case 的样式并且守卫比等式风格更少重复。

关于haskell - 查看模式与模式防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com