gpt4 book ai didi

scala - 是否可以在 Haskell 中提供自定义模式分解?

转载 作者:行者123 更新时间:2023-12-04 16:39:46 24 4
gpt4 key购买 nike

在 Haskell 中,我有一个具有偏序类型的模块:

data PartialOrder a = PartialOrder [a] [(a, a)]

我不导出值构造函数,因为这不是我希望使用该类型的方式,但我仍然希望能够在模块外部对 PartialOrder 类型进行模式匹配;这可能吗?特别是,我希望能够对不是类型构造函数的东西进行模式匹配,而是对如下内容进行模式匹配:
f (PartialOrder xs le) = ...

在哪里 le是一个隐式定义值构造函数中定义的显式排序的函数。我知道 Scala 中有这样的设施,有没有办法在 Haskell 中做同样的事情?

提前致谢。

最佳答案

这听起来像是 ViewPatterns 的用例.您可以编写如下类型:

data ViewPartialOrder a = ViewPartialOrder a (a -> a -> Ordering)

编写如下函数:
viewOrder :: PartialOrder -> ViewPartialOrder
viewOrder (PartialOrder xs relation) = ...

然后使用 ViewPatterns扩展来编写这样的代码:
f (viewOrder -> ViewPartialOrder xs le) = ...

当然,你应该为这些东西想出更好的名字:P!

无论好坏,都无法隐含地产生相同的效果(即没有 viewOrder 函数)。我认为这通常是一件好事,清楚地表明您与类型的实际实现不匹配。

关于scala - 是否可以在 Haskell 中提供自定义模式分解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719153/

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