
有一个具体的例子,我们假设我们要做一个直方图函数:
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和文本(以及其他类似的表示)上工作,所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)