使单个函数适用于列表、字节字符串和文本(或许还有其他类似的表示形式)

2023-11-22

我正在编写一个函数,它可以在任意符号序列中进行一些搜索。我想让它足够通用,以便它可以在列表上运行,Foldable以及ByteStrings and Texts。将其概括为Foldable很简单。但如何包含ByteStrings and Text是?当然我可以转换ByteString进入列表,然后调用我的函数,但我会失去所有优势ByteStrings.

举一个具体的例子,假设我们想要创建一个直方图函数:

import Control.Monad.State
import qualified Data.Foldable as F
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Data.Word
import qualified Data.ByteString as B
import qualified Data.Text as T

type Histogram a = Map a Int

empty :: (Ord a) => Histogram a
empty = Map.empty

histogramStep :: (Ord a) => a -> Histogram a -> Histogram a
histogramStep k = Map.insertWith (+) k 1

histogram :: (Ord a, F.Foldable t) => t a -> Histogram a
histogram = F.foldl (flip histogramStep) empty

但既然两者都没有ByteString也不能是文本Foldable(它只存储Word8s/Chars,而不是任意元素),我坚持创建更多看起来像的函数exactly和之前的一样,只是类型签名不同:

histogramBS :: B.ByteString -> Histogram Word8
histogramBS = B.foldl (flip histogramStep) empty

histogramText :: T.Text -> Histogram Char
histogramText = T.foldl (flip histogramStep) empty

这是像 Haskell 这样的函数式语言所没有想到的。

如何使其通用,编写histogram一劳永逸?


你的解决方案几乎就是ListLike包确实如此。还有附加包类似列表的实例它添加了实例Text and Vector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使单个函数适用于列表、字节字符串和文本(或许还有其他类似的表示形式) 的相关文章

随机推荐

  • Javascript:找出点击了哪个元素而不附加任何事件侦听器?

    我对寻找解决此问题的方法感到困惑 考虑下面的html div div div div div div div div div div div div 事件侦听器附加到父元素 如果用户单击 child c 有没有办法使用 myFunc 找出单
  • 如何使用linux命令获取部分路径

    例如需要获取路径的一部分 home server folder1 rev 1111 bin 需要的部分是 rev 1111 我将尝试通过 PWD 和 grep 命令进行解析 但我是 Linux 新手 我不能这样做 pwd awk F pri
  • 函数没有隐式类型

    我正在尝试学习使用函数 我有以下代码 program main implicit none write test 4 end program integer function test n implicit none integer int
  • Hibernate/JPA - 实体侦听器未正确调用

    我正在尝试在我的 Seam Hibernate JPA 应用程序中利用 EntityListener 对象和回调方法 我在 JBoss 5 1 上使用 Seam 2 2 管理的持久性上下文 后端使用 PostgreSQL 9 1 我声明了以
  • 在 iOS 上使用 SOAP Web 服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试为 iPad 编
  • 如何在 Java 中运行 GDAL (ogr2ogr) 将 Shapefile 转换为 GeoJSON

    我是编程初学者 在尝试使用外部库时感到非常困惑 我将地图保存在 shapefile 中 并使用 Mapshaper org 网站将其转换为 GeoJSON 只有这样我才能从 Java 应用程序读取地图 我希望用户能够直接导入 shapefi
  • CSS:将元素集中在 y 轴的标准(动态)方式

    我的问题或多或少是不言自明的 我试图找到一种标准的动态方法来将元素集中在 y 轴上 就像 margin auto 对于 x 轴 有任何想法吗 我说的是下面的一段代码 空白页面 在中心对齐一张图像 div style display bloc
  • 找到图像中相似区域的好算法?

    我想搜索两个图像中的相似区域 但我不知道什么效果最好 这些区域不会以任何方式缩放或转换 但可能出现在两个图像中的任何位置 我想知道在哪里 他们周围还有其他东西 这是我想要的一个例子 我怎样才能做到这一点 分割图像 获取已找到区域的绑定矩形
  • 多线程中的静态变量

    I found that declaring a variable as static makes no sense in 多线程 我认为 这是因为every thread has its own stack 这是唯一的原因吗 我知道sta
  • 如何处理 Elasticsearch 索引中的空值

    我有一个 SQL 表 正在导出到 Elasticsearch 其中一列是可为空的数字字段 某些记录中存在空值 当我们尝试为表建立索引时 会出现以下错误 表的 ETL BigQuery gt ElasticSearch 作业之一 MLS 有
  • SQL查询获取与另一列的最大值相对应的列值?

    好的 这是我的查询 SELECT video category video url video date video title short description MAX video id FROM videos GROUP BY vid
  • 在客户端使用 dc.js,在服务器上使用 crossfilter

    我正在致力于为大型数据集创建交互式可视化 由于数据集大小 无法在浏览器中加载数据集 我们在节点服务器上使用 crossfilter 来加载和过滤服务器端的数据 我想知道是否可以以某种方式将服务器端交叉过滤器过滤器与 dc js 图表结合起来
  • 什么时候适合使用NOLOCK?

    我在一些长时间运行的查询中时不时地遇到超时问题和死锁 我想知道什么时候使用NOLOCK最合适 在哪里使用 我是否在更新和插入中使用它 或阅读 请注意 您可以在每个表的基础上指定 nolock 我通常在复杂的 SELECT 查询中使用 nol
  • 如何将 Spark 中的分类变量转换为一组编码为 {0,1} 的列?

    我正在尝试使用 Spark MLlib 使用 Scala 对包含分类变量的数据集执行逻辑回归 LogisticRegressionWithLBFGS 我发现 Spark 无法使用这种变量 在 R 中 有一种简单的方法来处理此类问题 我将变量
  • 为什么java主类中需要main()方法

    我知道我们可以在没有main 方法的情况下成功编译和运行java程序 但是为什么我们仍然需要在java的主类中使用main 方法呢 每个 Java 应用程序都必须包含一个 main 方法 其签名如下所示 public static void
  • 将项目附加到可变参数函数包装器而不重新分配新切片

    好的 我需要一个 fmt Printf 的小包装以方便调试 1 调用 fmt Fprintln 时参数过多 func Debug a interface if debug fmt Fprintln out prefix sep a 2 接口
  • 将 Django 连接到 Google Cloud SQL

    我正在尝试将 Django 连接到 Google 云 SQL 在 Windows 下使用 python 2 7 和 django 1 5 我浏览了此页面上的说明 https developers google com appengine d
  • 无需递归函数调用的排列

    要求 算法生成集合的所有可能组合 不重复 或递归调用函数返回结果 大多数 如果不是全部的话 的答案在JavaScript 中的排列 从循环或其他函数中递归调用函数以返回结果 循环内递归函数调用的示例 function p a b res v
  • phpMyAdmin 不显示添加的列

    自从我得到 phpMyAdmin 3 5 2 2 以来 出现了一个奇怪的问题 当我向特定表添加新列时 它不会显示在概述中 这个问题只出现在一张表上 其他都正常 在设置中找不到某些内容 我也有过这样的经历 XAMPP 1 8 1 PHP 5
  • 使单个函数适用于列表、字节字符串和文本(或许还有其他类似的表示形式)

    我正在编写一个函数 它可以在任意符号序列中进行一些搜索 我想让它足够通用 以便它可以在列表上运行 Foldable以及ByteStrings and Texts 将其概括为Foldable很简单 但如何包含ByteStrings and T