haskell – 使单个功能在列表,ByteStrings和文本(以及其他类似的表示)上工作,

haskell – 使单个功能在列表,ByteStrings和文本(以及其他类似的表示)上工作,,第1张

概述我正在编写一个按照任意符号序列进行搜索的功能.我想让它足够通用,以便它可以在列表,Foldable以及ByteStrings和Texts上工作.将其概括为可折叠是简单的.但是如何包括字节串和文本?当然可以将ByteString转换成列表,然后调用我的函数,但是我将失去所有的优点ByteStrings. 有一个具体的例子,我们假设我们要做一个直方图函数: import Control.Monad.S 我正在编写一个按照任意符号序列进行搜索的功能.我想让它足够通用,以便它可以在列表,Foldable以及ByteStrings和Texts上工作.将其概括为可折叠是简单的.但是如何包括字节串和文本?当然可以将ByteString转换成列表,然后调用我的函数,但是我将失去所有的优点ByteStrings.

有一个具体的例子,我们假设我们要做一个直方图函数:

import Control.Monad.Stateimport qualifIEd Data.Foldable as Fimport Data.Map.Strict (Map)import qualifIEd Data.Map.Strict as Mapimport Data.Wordimport qualifIEd Data.ByteString as Bimport qualifIEd Data.Text as Ttype Histogram a = Map a Intempty :: (Ord a) => Histogram aempty = Map.emptyhistogramStep :: (Ord a) => a -> Histogram a -> Histogram ahistogramStep k = Map.insertWith (+) k 1histogram :: (Ord a,F.Foldable t) => t a -> Histogram ahistogram = F.foldl (flip histogramStep) empty

但是既然ByteString和Text都不能被折叠(它只存储Word8s / Chars,而不是任意的元素),所以我不得不创建更多类似于之前的函数,只是使用不同的类型签名:

histogramBS :: B.ByteString -> Histogram Word8histogramBS = B.foldl (flip histogramStep) emptyhistogramText :: T.Text -> Histogram CharhistogramText = T.foldl (flip histogramStep) empty

这在Haskell这样的功能语言中并不期待.

如何使其通用,一次性直接写入直方图?

解决方法 您的解决方案几乎是 ListLike软件包的功能.还有一个额外的包 listlike-instances,它添加了Text和Vector的实例. 总结

以上是内存溢出为你收集整理的haskell – 使单个功能在列表,ByteStrings和文本(以及其他类似的表示)上工作,全部内容,希望文章能够帮你解决haskell – 使单个功能在列表,ByteStrings和文本(以及其他类似的表示)上工作,所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1142325.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存