获取 Data.ByteString.Builder 的长度

2024-01-11

我有一个函数tabulate它接受一个对象列表以及将这些对象的字段转换为函数的列表Builders。它返回一个Builder代表一个格式良好的表格。例如。:

tabulate :: [a -> Builder] -> [a] -> Builder
tabulate = ...
data Assc = Assc { key :: String, value :: String }

> let funcs = [string7 . key, const $ char7 '=', string7 . value ]
> let objs = ["short" `Assc` "a", "longer" `Assc` "b", "waylongername" `Assc` "c"]
> hPutBuilder stdout $ tabulate funcs objs
short         = a
longer        = b
waylongername = c

为此,我需要确定每列的最大长度。目前我正在使用toLazyByteString在每个元素上(这太慢了)。

是否可以得到a的长度Builder无需先将其变成ByteString?

或者,是否有另一种方法(有效)实现tabulate(使用或不使用Builder)?


探究源头Builder http://hackage.haskell.org/package/bytestring-0.10.2.0/docs/src/Data-ByteString-Builder-Internal.html#Builder,它被定义为

newtype Builder = Builder (forall r. BuildStep r -> BuildStep r)

所以测序Builder只是组合函数,并且在不评估函数堆栈的情况下无法获取输出的长度。但是您可以创建自己的辅助模块,其数据类型将结合Builders 与长度计算:

newtype BuilderL = BuilderL { blLenght :: !Int, blBuilder :: Builder }

instance Monoid BuilderL where
    mempty = BuilderL 0 mempty
    mappend (BuilderL l1 t1) (BuilderL l2 t2) = BuilderL (l1 + l2) (t1 <> t2)

然后创建辅助函数来构建BuilderLs, like

byteString :: ByteString -> BuilderL
byteString t = BuilderL (length t) (byteString t)

等等,然后使用这个模块并BuilderL适合您的桌子,并且您始终可以掌握所需的长度。

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

获取 Data.ByteString.Builder 的长度 的相关文章

  • 指定 ghci 中“加载”操作的搜索路径

    In 加载源文件 http www haskell org ghc docs 7 6 1 html users guide loading source files html它指出查找源文件的搜索路径是使用 i 选项指定的 ghci idi
  • 如何将“-ddump-minimal-imports”与堆栈一起使用

    我是 stack 的忠实粉丝 我已经从我的机器中完全删除了任何独立的 cabal 和 ghc 可执行文件 让 stack 在它自己神秘的 stack 目录中安装它需要的任何东西 但是 看起来有些标志在堆栈下无法正常工作 例如 我想使用 dd
  • Parsec-Parser 工作正常,但是可以做得更好吗?

    我尝试这样做 解析以下形式的文本 一些文本 0 0 0 一些文本 0 0 0 0 0 0 更多文本 0 0 0 进入一些数据结构的列表 内部 一些文本 外部 0 0 0 内部 一些文本 外部 0 0 0 外部 0 0 0 内部 更多文本 外
  • 功能段落

    抱歉 我还不太明白 FP 我想将一系列行分割成一系列行序列 假设一个空行作为段落划分 我可以在 python 中这样做 如下所示 def get paraghraps lines paragraphs paragraph for line
  • Haskell FFI - 你能从 Haskell 数据结构中获取 C 指针吗?

    我有很多 C 结构体 结构如下 typedef struct unsigned int a unsigned int b StructA 还有很多功能 比如 void doSomethingWith StructA StructB Stru
  • 你在实际项目中使用过Quickcheck吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 快速检查 http www cs chalmers se rjmh QuickCheck 及其变体 即使有一个Java https bitbuc
  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • Foldl 是否比其严格的表亲 Foldl' 更好?

    Haskell 有两个列表左折叠函数 foldl 以及 严格 版本 foldl 不严格的问题foldl是它建造了一座重击塔 foldl 0 1 5 gt 0 1 2 3 4 5 gt 15 这会浪费内存 并且如果列表中的项太多 可能会导致堆
  • 在 Windows 上使用堆栈安装 SDL2 for Haskell

    我正在尝试将 SDL2 与堆栈一起使用 我跟着这些说明 https www reddit com r haskellgamedev comments 4jpthu windows sdl2 is now almost painless vi
  • Haskell 中的异构多态性(正确方法)

    让一个模块来抽象Area操作 错误的定义 class Area someShapeType where area someShapeType gt Float module utilities sumAreas Area someShape
  • Accelerate 和 Repa 是否有不同的用例?

    我一直在玩 Repa 和 Accelerate 它们都很有趣 但我不知道何时使用其中一个 何时使用另一个 他们是一起成长 是竞争对手 还是只是为了解决不同的问题 Repa 是一个用于高效数组构建和遍历的库 用 Haskell 编程并在 Ha
  • 是否可以列出派生 Generic 的记录数据类型中字段的名称和类型?

    我知道对于派生 Data Data 的数据类型 constrFields http hackage haskell org package base 4 7 0 2 docs Data Data html v constrFields给出字
  • 如何在 Haskell 中获得列表的中间位置?

    我刚刚开始使用 Haskel 学习函数式编程 我正在慢慢度过Erik Meijer 在 Channel 9 的讲座 http channel9 msdn com shows Going Deep Lecture Series Erik Me
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • 如何让 Show 显示函数名称?

    作为一个让我熟悉 Haskell 的简单练习 在 Youtube 上闲逛并偶然进入美国倒计时游戏节目之后 我想为数字游戏制作一个求解器 你得到 6 个数字 需要将它们与 为了得到给定的结果 到目前为止我所得到的是非常脑死亡的 let ope
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 无点镜头创建不进行类型检查

    在函数中test 我遍历一个列表 从它的成员生成镜头 然后打印一些数据 当我使用有针对性的呼叫风格时 这会起作用 当我使其成为无点时 它无法进行类型检查 为什么会出现这种情况 我该如何解决这个问题 在我看来 GHC 并没有保留排名较高的信息

随机推荐

  • 垃圾收集器如何识别根

    标记 清除垃圾收集器的第一阶段是标记 查找 堆上的所有活动对象 为此 必须有一个起点或根 所有标记都从那里开始 GC如何识别这样的根 假设一组不同的对象是可访问的 这些对象被称为根 通常 这些对象包括从调用堆栈中任何位置引用的所有对象 即当
  • 通过 VPN 连接的 iPhone 远程调试

    当我的 iPhone 使用本地 WiFi 时 Xcode 会通过网络看到我的 iPhone 我的 Mac Pro 开发计算机正在运行带有 VPN 服务器的 macOS Server 当我从 iPhone 通过 VPN 连接到 Mac Pro
  • Qt:在构造函数内部连接 ​​- 在初始化对象之前会调用槽吗?

    我正在学习 Qt 框架 C 想知道 QT 是否有任何机制来保护插槽在对象完全初始化之前不被调用 考虑 A 类构造函数 A A mTreeView new QTreeView connect mTreeView QTreeView custo
  • 删除html表格中的外边框

    我正在开发 HTML 格式的报告 我那里有一张桌子 在每个 TD 中我都有另一个表 我想将 td 中的每个表分开 所以我启用了主表的边框 但内部表格很少需要显示单元格边框 但我不希望显示该特定内部表格的外边框 Ex table tr td
  • 是否可以使 VSO(Visual Studio Online)存储库公开可见?

    我喜欢 VSO Visual Studio Online 功能及其能力 但我希望其他用户 匿名 能够查看我的某个项目的存储库 我试图在项目设置中使用安全性内容 但无法弄清楚如何设置对我的存储库的公共访问 有可能吗 目前 没有 VSTS 目前
  • 当应用程序处于后台且具有数据负载时,如何处理 Android FCM 消息? [复制]

    这个问题在这里已经有答案了 当应用程序处于后台时 使用 FCM 的 Android 推送通知无法处理 默认消息显示在通知托盘中 任何人都可以帮助我如何在后台应用程序时处理消息 Override public void onMessageRe
  • 在 Swift 中,如何扩展类型别名?

    我有一个类型别名 typealias BeaconId String NSObject 我想通过做类似的事情来扩展它 extension BeaconId 但这会引发编译错误 必须在非专用泛型类型 Dictionary 上声明约束扩展 并使
  • RangeError(索引):无效值:唯一有效值为0:1

    我是颤振的新手 我正在尝试将数据列表添加到视图中 数据列表具有不同长度的不同订单项集合 我正在从 API 获取数据 但由于订单数据的长度不同 我收到如下图所示的错误 我的 json api 如下 status success message
  • 检测 AppWidget 上的 OnTouch。如果可以的话?

    检测 AppWidget 上的 OnTouch 如果可以的话 你好 我正在尝试为 Android 2 1 创建我的第一个 AppWidget 其中客户端可能有机会在我的自定义视图上选择一个项目 我将为其创建一个自定义视图和一个滑块 客户可以
  • 从 Flowable Room ORM 发出每个项目

    我在 Room ORM 中有一个项目列表 我想在 Recycler 视图中显示它 数据正在从网络添加到数据库 问题是我每次都会得到从 Flowable 发出的整个列表 而不是每个项目 我尝试过 distinctUntilChanged 没有
  • 从表生成sql脚本

    替代文本 http www freeimagehosting net uploads 64fac9c8c4 gif http www freeimagehosting net uploads 64fac9c8c4 gif 是否可以为所有表生
  • 如何将 GKE Ingress 与 Nginx Ingress 结合使用?

    GKE 入口 https cloud google com kubernetes engine docs concepts ingress https cloud google com kubernetes engine docs conc
  • 用于查找一组字符串中最长公共起始子字符串的 R 实现

    这个问题只是要求在 R 中实现以下问题 查找一组字符串中最长的公共起始子串 https stackoverflow com questions 1916218 find the longest common starting substri
  • 如何防止 Visual Studio 自动完成功能覆盖下一个单词

    我在 Visual Studio 中遇到一个非常烦人的问题 我的版本是 2010 我安装了 ReSharper 和 VsVim 但我认为这并不重要 当我在某些现有代码开头的某些代码之前添加文本时 自动完成功能喜欢覆盖某些现有代码 以这个示例
  • 当数据类型为数字时,如何对谷歌图X轴进行排序

    我有一个数据表 第一列是 1 到 48 范围内的数字 Step Pct 1 0 2 0 3 0 4 35 5 45 6 55 7 60 我的代码如下所示 Grid Table is my html table containing the
  • 如何删除超过 (n) 天的文件,但保留 (n) 个文件,无论其年龄如何?

    我用 PHP 编写了以下内容 但我想知道是否有一种优雅的方法可以在 Linux shell 脚本中执行此操作 基本上删除超过 n 天的文件 但保留 n 最新的文件 无论其年龄如何 PHP foreach glob backup db as
  • MySQL - SELECT + JOIN + ORDER BY 性能

    我有两个表 我需要从两个表中选择一些连接的数据 SELECT f FROM file data f JOIN subscriptions s ON f uid s elementid WHERE s uid 119762 AND f pri
  • FFMPEG 套件 iOS 异步调用未异步运行

    当我打电话给executeAsync的方法FFmpegKit我期望异步行为 但代码会运行但从不等待FFmpegKit executeAsync运行 因此 程序输出来自print FFmpeg process exited with stat
  • 将值添加到数据框的所有行

    我有两个熊猫数据框df1 长度为 2 和df2 长度约 30 行 df1 的索引值始终不同 并且不会出现在 df2 中 我想添加来自的列的平均值df1到相应的列df2 示例 将 0 6 添加到 c1 的所有行 将 0 9 添加到 c2 的所
  • 获取 Data.ByteString.Builder 的长度

    我有一个函数tabulate它接受一个对象列表以及将这些对象的字段转换为函数的列表Builders 它返回一个Builder代表一个格式良好的表格 例如 tabulate a gt Builder gt a gt Builder tabul