gpt4 book ai didi

haskell - 我可以根据 a 的类型类专门化 Foldable 实例方法吗?

转载 作者:行者123 更新时间:2023-12-02 17:58:40 26 4
gpt4 key购买 nike

我有一个用于存放a可折叠容器。 BasicPrelude 中的 Foldable 类型类提供的方法之一是 elem::(Eq a) => a -> t a -> Bool。现在,对于我的容器,只要我的 aOrd 实例,我就可以比默认情况更有效地实现 elem,但仅在这种情况下.

现在,如果可能的话,我希望拥有更高效的elem,最好具有相同的签名(即“透明地”)。但是,我只能看到一种方法,即需要对容器的 Foldable 实例进行 (Ord a) 约束,这在一般情况。

我是否可以仅在 aOrd 的情况下拥有专门的 elem 和通用的 elem 为其他人以某种方式?如果需要的话,我不介意使用 GHC 扩展。

最佳答案

没有。标准类型类与需要受限参数的类型不兼容,这是一个长期存在的问题。

查看 monotraversable library不过,特别是它的 MonofoldableOrd class ,这可能对您有用。 monotraversable 库是 Foldable/Traversable 类的替代版本,它被编写用于具有单态元素类型的容器(想想 >ByteStringText)或具有类限制的元素类型(例如 Set)。

该库是TypeFamilies extension的重度用户。 ,因此您可能需要稍微研究一下 - 尽管库源代码应该提供大量有关如何使用扩展的示例。

关于haskell - 我可以根据 a 的类型类专门化 Foldable 实例方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039873/

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