QuickCheck 实例属于 cabal 包中的什么位置?

2024-01-30

我有一个阴谋集团包 https://github.com/acfoltzer/nbt导出一个类型NBT https://github.com/acfoltzer/nbt/blob/master/src/Data/NBT.hs这可能对其他开发人员有用。我经历了定义一个的麻烦Arbitrary我的类型的实例,如果不将其提供给其他开发人员来测试他们集成我的工作的代码,那将是一种耻辱。

但是,我想避免我的实例可能妨碍的情况。也许其他开发者有一个不同的想法 https://stackoverflow.com/questions/5643360/how-do-you-override-haskell-type-class-instances-provided-by-package-code为了什么Arbitrary实例应该是。也许我的包对特定版本的 QuickCheck 的依赖可能会干扰客户端项目的依赖项,或者在客户端项目的依赖项中是不需要的。

我的想法(排名不分先后)是:

  • 留下Arbitrary类型定义旁边的实例,并让客户端处理隐藏实例或覆盖 QuickCheck 版本号。
  • 使Arbitrary实例同一包内单独模块中的孤立实例,例如Data.NBT.Arbitrary。整个包对 QuickCheck 的依赖仍然存在。
  • 提供Arbitrary实例位于完全独立的包中,以便可以将其列为客户端项目的单独测试依赖项。
  • 有条件地包括Arbitrary实例和主包中的 QuickCheck 依赖项,但前提是像这样的标志-ftest is set.

我已经在其他库中看到过所有这些的组合,但还没有找到关于哪种效果最好的共识。我想在上传到 Hackage 之前尝试将其正确。


基于没有太多具体经验,但对健壮性的普遍渴望,包依赖关系的指导原则也许应该是

各尽所能;根据每个人的需要。

最好将包的依赖关系保持在其基本功能所需的最低限度。这向我建议了选项 3 或选项 4。当然,把包裹砍这么多也是很痛苦的。如果选项能够表达所涉及的条件,那么选项 4 听起来像是一个明智的方法,它基于有效地使用语言来表达你的意思。

如果我们能够就需要按下哪个开关才能获得测试套件以及基本功能达成共识,那就太好了。

很明显,这里还有改进的空间。令人惊奇的是 Cabal 的工作效果如此之好,但它可以允许更复杂的“包”概念,也许是按照 SML 模块系统的方式。将依赖关系转换为函数类型,我们基本上可以编写

simplePackage :: (Dependency1, .., Dependencyn) -> Deliverable

但人们可以想象更复杂的产品和功能组合,比如

fancyPackage :: BasicDependency -> (BasicDeliverable, HelpfulExtras -> Gravy)

在此之前,请选择最准确反映实际交易的选项。并告诉我们这一点,以便我们能够达成共识。

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

QuickCheck 实例属于 cabal 包中的什么位置? 的相关文章

  • 管道 - 将多个来源/生产者合并为一个

    我正在使用读取文件sourceFile 但我还需要在处理操作中引入随机性 我认为最好的方法是拥有一个这样的制片人 Producer m StdGen ByteString 其中 StdGen 用于生成随机数 我打算让生产者执行 source
  • 如何只修改记录的一个字段而不完全重写它? [复制]

    这个问题在这里已经有答案了 It s the second time I m tackling this problem And for the second time this is while working with the Stat
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 这是 unsafeCoerce 的安全使用吗?

    我遇到的情况是 我目前正在使用极其可怕的函数 unsafeCoerce 幸运的是 这并不是为了任何重要的事情 但我想知道这是否是该函数的安全使用 或者是否有其他方法可以解决其他人知道的这个特定问题 我的代码类似于以下内容 data Toke
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 与 Functor 不同,Monad 可以改变形状?

    我一直很喜欢以下关于单子相对于函子的力量的直观解释 单子可以改变形状 函子不能 例如 length fmap f 1 2 3 总是等于3 然而 对于单子来说 length 1 2 3 gt gt g往往不等于3 例如 如果g定义为 g Nu
  • 来自数据类型的 Haskell 随机数

    我对 Haskell 还很陌生 我有一个数据类型 data Sentence Prop Int No Sentence And Sentence Or Sentence deriving Eq 我已经为它写了一个 Show 实例 然而 无论
  • Cabal:使用源代码构建目录

    我有一个src目录 在这个目录中我有Main hs文件和Test目录 在里面Test我有的目录Test hs模块 我需要用 cabal 来编译它 在我的阴谋集团文件中 我有 Executable main hs or lhs file co
  • HASKELL:解决河内塔

    下面的代码解决了 hanoi 使用预定义函数 moveLOD swapLOI 和 swapLID 返回移动列表的问题 MoveLOD 将 1 个圆盘从第一个位置移动到三元组第三个位置中的第三个销钉 此外 包含有关运动信息的字符串会堆积在字符
  • 当约束成立时,将没有约束的 GADT 转换为另一个有约束的 GADT

    我们能否将构造函数没有给定约束的 GADT 转换为具有上述约束的 GADT 我想这样做是因为我想要深度嵌入箭头并用 目前 似乎需要的表示做一些有趣的事情Typeable 一个理由 https stackoverflow com a 1223
  • monadicIO 的工作原理

    我有以下代码 fastShuffle a gt IO a fastShuffle a
  • parList 和 parBuffer 如何选择?

    我从 haskell 并行开始 我已经成功学习了如何使用一些策略 例如 r0 rseq rdeepseq parList parMap 现在我正在进一步寻求更高的效率 所以这是我的问题 有什么区别parList and parBuffer
  • 如何获得具有超载字段名称的经典镜头?

    我正在尝试为具有相同字段名称的记录构建镜头 除此之外 我试图 包装 扩展 这些基本记录 并希望相同的字段名称适用于包装 扩展的记录 我相信 优雅的镜头就是这样做的 我如何让以下内容发挥作用 Data types for context of
  • Show for String的实例是怎么写的?

    我有一个关于定义类型类实例的基本问题 我使用 Show 类型类作为示例 并且只考虑类中的 show 函数 像 Bool 这样的具体类型的 Show 实例很简单 instance Show Bool where show x function
  • 如何使用范围内的约束族来证明表达式主体内的实例?

    这是后续我之前的问题 https stackoverflow com questions 70075414 how can i derive typeclass instances from constraint families that
  • 双共体的方法是什么?

    在思考建议哪些更有用的标准课程时到这个 https stackoverflow com a 40833245 745903 class Coordinate c where createCoordinate x gt y gt c x y
  • 运行程序的最佳 Haskell 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我要将一个程序投入生产 我需要该程序做几件事才能将其视为 可操作 也就是说 工程师和操作人员以可测量
  • Haskell 中动态规划的高效表

    我已经编码了0 1背包问题 http en wikipedia org wiki Knapsack problem 0 1 knapsack problem在哈斯克尔 我对迄今为止所取得的懒惰和普遍性水平感到相当自豪 我首先提供用于创建和处
  • 为自定义镜头编写类别实例

    我一直在读这个article http www haskellforall com 2012 01 haskell for mainstream programmers 28 html用于理解镜头 我知道这不同于 爱德华 克内特 Edwar

随机推荐

  • 为什么从 .dll 导入函数时需要 .lib 文件?

    你能帮我理解 为什么从 dll 导入函数和数据时需要 lib 文件吗 我听说它包含来自相应 dll 的导出函数和数据元素的列表 但是当我使用 CFF Explorer 探索我的 dll 时 我发现 dll 已经具有导出函数的地址 因此理论上
  • 导致运行时异常在控制台输出中使用 println 正确排序

    VM Java 控制台输出的一个常见问题是 System out 和 System err 通常未正确同步 可能是因为它们位于不同的线程上 这会导致混合输出 如下所示 调试输出与运行时异常堆栈跟踪混合在一起 8 1 3 5 9 13 15
  • IBOutlets 在 Xamarin.iOS 中为私有的原因是什么

    生成的 Designer cs 属性默认是私有的 至少不需要手动调整生成的代码 这使得针对 UITableViewCell 等内容进行编码与在 Objective C 中进行编码相比有很大不同 对于 UIxxxViewCells 来说 流行
  • 无法解析:org.jitsi.react:jitsi-meet-sdk:+

    我正在尝试将 Jitsi Meet Android SDK 集成到本机 Android 中的一个简单项目中 但无法构建并引发以下错误 Failed to resolve org jitsi react jitsi meet sdk 我跟着j
  • pthread_join 损坏堆栈中的 pthread_create 参数

    我从一本高级 Linux 编程书中得到了这段代码 当我尝试在Linux 64位环境下执行代码时 which prime之后变量被损坏 更改为 0 pthread join 函数调用 在这个例子中为什么值which prime运行 pthre
  • 获取 MongoDB 中特定字段平均值的最快方法

    假设我有一个如下所示的数据集 id ObjectId 4dd51c0a3f42cc01ab0e6506 views 1000 status 1 id ObjectId 4dd51c0e3f42cc01ab0e6507 views 2000
  • 底部导航菜单单击图标选择

    我认为相关的两个问题 背景 我有三个底部导航项 它们导致其他布局和活动 其中之一是 家 在 Home 中 执行 onClick 时 会打开选定的活动和布局 但选定的图标仅在单击时突出显示 然后突出显示 Home 如果再次按下 则会突出显示选
  • 如何清除ResourceBundle缓存

    这是一个使用 Guice 在 Tomcat 上运行的 Web 应用程序 根据文档我们应该能够调用ResourceBundle clearCache 清除 ResourceBundle 缓存并大概从包属性文件中获取最新的信息 我们还尝试了以下
  • 使用 nametuple._replace 和变量作为字段名

    我可以使用变量引用命名元组字段吗 from collections import namedtuple import random Prize namedtuple Prize left right this prize Prize Fir
  • 如何确定 Asp.net 页面中包含的重复 Javascript 函数

    我有一个使用一些 javascript 函数的应用程序 由于所有的 javascript 都包含在母版页中 因此页面附带的大多数 javascript 都是不必要的 并且其中一些是重复的 因为在某些不同的 JS 文件中使用 所以我想检查是否
  • 左值到右值的转换何时发生、如何工作以及是否会失败?

    我看到在整个 C 标准的许多地方都使用了术语 左值到右值转换 据我所知 这种转换通常是隐式完成的 标准措辞的一个 对我而言 意想不到的特征是 他们决定将左值到右值视为一种转换 如果他们说左值而不是纯右值总是可以接受的怎么办 这句话实际上有不
  • 模拟杀死模拟器中的活动

    我想测试一下onSaveInstanceState and onRestoreInstanceState对于我的模拟器上的应用程序 我已经发现this https stackoverflow com questions 2355884 ho
  • Java 中的断言是什么以及何时应该使用它们?

    有哪些现实生活中的例子了解Java的关键作用assert关键词 断言 http docs oracle com javase specs jls se8 html jls 14 html jls 14 10 通过assert关键字 是在 J
  • 使用 VBA 更新 xlam 加载项

    Sub Install Addin Dim AI as excel addin Set AI Application Addins Add C Add In xlam AI Installed True Application Addins
  • 如何使我的数据集随时间连续? [R]

    我有一个 x y 日期和时间的数据集 我的初始数据集是 x y date time 1 2 1 1 01 15 00 2 5 1 1 01 17 00 3 1 1 1 01 18 00 5 7 1 1 01 21 00 2 6 1 1 01
  • 如何处理跨线程访问异常?

    在 WPF 中使用多线程时可能出现的一个常见异常是 调用线程无法访问该对象 因为另一个线程拥有它 有哪些选择可以正确处理这个问题 根据情况有多种选择 从另一个线程访问控件 e g updating a TextBlock with prog
  • 使用 Java 驱动程序获取 Mongo 实例的版本

    正如标题所示 我想获取客户端连接的 mongo 实例的版本 目前我使用的是 mongo java 驱动程序 2 9 3 mongo 实例是 2 2 2 我需要这个 以便支持两者 pushAll and push with each函数 因为
  • 尽管版本是托管的,为什么我会由于缺少 dependency.version 而得到无效的 pom?

    我有一个看起来像这样的案例 super 第三方依赖管理 父pom 超级的孩子 projectA 父母 pom 的孩子 对第三方的依赖 projectB 父母 pom 的孩子 对项目A的依赖 项目 A 构建得很好 但是当我尝试编译项目 B 时
  • Django 将页面限制为某些用户

    我开始尝试在我正在开发的网站上实现用户 也许这不是一个好方法 因为我是 django 的新手 到目前为止 我有一个简单的模板检查 可以为不同的人提供不同的链接 extends base htm block content if user u
  • QuickCheck 实例属于 cabal 包中的什么位置?

    我有一个阴谋集团包 https github com acfoltzer nbt导出一个类型NBT https github com acfoltzer nbt blob master src Data NBT hs这可能对其他开发人员有用