作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对我来说,整数集似乎是一种可折叠的数据结构。
为什么是 Data.IntSet
不是 Foldable
的实例?
我的实际意图是使用 find
在 IntSet
.
如何实现 Data.IntSet
的查找?
最佳答案
IntSet
不能是 Foldable
来自 base
包,因为它没有种类 * -> *
.
ghci> :t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
ghci> :k Foldable
Foldable :: (* -> *) -> Constraint
ghci> import Data.IntSet (IntSet)
ghci> :k IntSet
IntSet :: *
Foldable
的实例来自
base
您的数据类型应该由某个类型变量参数化。如果你想对
IntSet
进行一些操作您应该使用
Data.IntSet
中的某些功能实现所有专用版本的模块。
Foldable
的存在版本其中
IntSet
可以实例化(和
we actually did this in our library 并且之前使用
MonoFoldable
完成)。你只需要正确地实现你的抽象:
{-# LANGUAGE TypeFamilies #-}
type family Element t
type instance Element (f a) = a
type instance Element Text = Char
type instance Element IntSet = Int
class ProperFoldable t where
foldr :: (Element t -> b -> b) -> b -> t -> b
find
):
find :: (a -> Bool) -> IntSet -> Maybe a
因为
a
类型变量。你能回答问题«什么是
a
?»?
IntSet
不是多态容器。它仅包含
Int
s。所以你可以实现的最大值是
find :: (Int -> Bool) -> IntSet -> Maybe Int
.并且没有有效的方法来实现这个功能,只能通过转换
IntSet
像这样列出:
import Data.Foldable (find)
import Data.IntSet (IntSet)
import qualified Data.IntSet as IS
intSetFind :: (Int -> Bool) -> IntSet -> Maybe Int
intSetFind predicate = find predicate . IS.elems
关于haskell - 可折叠的 IntSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424976/
对我来说,整数集似乎是一种可折叠的数据结构。 为什么是 Data.IntSet不是 Foldable 的实例? 我的实际意图是使用 find在 IntSet . 如何实现 Data.IntSet 的查
感谢 newtype 和 GeneralizedNewtypeDeriving 扩展,人们可以轻松定义不同的轻量级类型: newtype PersonId = PersonId Int derivin
我设计了使用 ArrayList 的新 IntSet 类。首先,我通过 ArrayList 扩展 Intset 并开始实现方法。我在 union() 方法中遇到了一些问题。这是我的代码... publ
来 self 的问题 Insert element to ArrayList with ascending order and no duplicate elements 我已经完成了插入方法。 现在
根据 Redis's memory optimization page可以设置可配置的 set-max-intset-entries 以优化大型整数集的内存。我用小于 2M 的整数做了一些测试,将 s
我是一名优秀的程序员,十分优秀!