在哪里(或为什么不存在)一个`Indexed`类比`Data.Array`更通用?

时间:2016-03-26 21:19:02

标签: haskell indexing typeclass

我正在寻找像

这样的东西
class Indexed a e | a → e where
  size   :: a → Int
  at     :: a → Int → e

(可能使用Ix

然后,任何可索引结构都可以通过索引访问。

E.g。

instance Indexed T.Text Char where
  size = T.length
  at   = T.index

instance Indexed [a] a where
  size = length
  at   = (‼)

count :: (Eq e, Indexed a e) ⇒ a → e → Int
count a e = length $ filter (e≡) $ map (a `at`) [0…size a - 1]

然后

> count ("foo bar foo" :: T.Text) 'o'
4
> count ("foo bar foo" :: String) 'o'
4

但是(例如)Data.TextData.ByteString没有类似类的实例(或者我找不到)。

0 个答案:

没有答案