如何在 Quickcheck 中使用修饰符(在我的例子中是积极的)

2024-01-24

我有一个功能,rev,它返回属于三个类型类的类型的一些值:

rev :: (Integral a, Show a, Read a) => a -> a
rev = read . reverse . show

我想用快速检查来测试它的一些属性。不过,我对测试 Integral 类型的负值不感兴趣,因为我正在使用Integer由于缺乏Natural在基础库中输入。所以我想,当生成的值为负时,我们取相反的值就可以了:

prop_id :: (Integral a, Show a, Read a) => Positive a -> Bool
prop_id n | n >= 0    = (rev.rev) n == n
          | otherwise = let n' = -n in (rev.rev) n' == n'

(测试的属性在这里并不重要 - 特别是它不适用于非常基本的值,我知道这一点,这不是这个问题的主题)

然后我遇到了Positive修改器并认为虽然我的测试现在正在运行,但以更好的方式实现它会很好。所以我尝试:

prop_id :: (Integral a, Show a, Read a) => Positive a -> Bool
prop_id n = (rev.rev) n == n

我必须承认,当它编译时我感到很惊讶。但运行测试时出现错误:

*** Failed! Exception: 'Prelude.read: no parse' (after 1 test): 
Positive {getPositive = 1}

所以我想,“嗯,必须声明这一点Positive事物的一个实例Read“。所以我就这么做了,但该实例已经在 QuickCheck 库中声明了,似乎是因为 ghci 对我大喊大叫。

此时我迷失了,因为我没有找到好的文档(如果有的话)。

任何帮助我理解修饰符和快速检查库中其他好东西的指针将不胜感激。


使用这些修饰符的常见方法是对它们进行模式匹配,例如

prop_id :: (Integral a, Show a, Read a) => Positive a -> Bool
prop_id (Positive n) = (rev.rev) n == n

这边走,n将具有基础类型。

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

如何在 Quickcheck 中使用修饰符(在我的例子中是积极的) 的相关文章

  • Haskell:对 Num 类型类的使用感到困惑

    我很困惑为什么这有效 f Num a gt a gt a f x x 42 但这并没有 g Num a gt a gt a g x x 4 2 我本来就明白Num包含实现运算符的所有类型 因此 如果42 is an Int and 4 2
  • 如何使用foldr为列表创建显示实例?

    我想为我的数据类型 我的列表 编写自己的显示实例 到目前为止 我的方法是有效的 但我总是在末尾有一个逗号 我已经尝试用最后一个元素启动折叠并将其从列表中删除 但它很麻烦而且不起作用 有没有更简单的方法来获得正确的解决方案 实际 1 2 3
  • 如何让 do 块提前返回?

    我正在尝试使用 Haskell 抓取网页并将结果编译到一个对象中 如果出于某种原因 我无法从页面获取所有项目 我想停止尝试处理页面并提前返回 例如 scrapePage String gt IO scrapePage url do doc
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • 为什么我不能声明推断类型?

    我有以下内容 runcount Eq a Num b gt a gt b runcount runcountacc 0 runcountacc Eq a Num b gt b gt a gt b runcountacc n runcount
  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c
  • Haskell 中的内部爆炸模式是否总是强制使用外部构造函数?

    在 Haskell 中 是否存在对于数据类型 LANGUAGE BangPatterns import Control DeepSeq data D D Int 实例 instance NFData D where rnf D 与具有另一个
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • Haskell if-then-else 条件中的“解析输入错误”

    当我尝试编译以下 do 块时 它会抛出错误 输入 conn 上的解析错误 我尝试了许多不同的 if then else 语句配置 但均无济于事 在我添加条件之前 数据库逻辑就起作用了 所以这没有问题 else 中是否有太多行 有没有办法在不
  • 将“Functor”类泛化为“MultiFunctor”?

    我正在学习 自由应用函子 https arxiv org pdf 1403 0749 pdf 当然 我要问的问题有点偏离论文的主要思想 但仍然 第 6 页试图概括Functor to MultiFunctor class Functor f
  • 如何获得具有超载字段名称的经典镜头?

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

    我有一个关于定义类型类实例的基本问题 我使用 Show 类型类作为示例 并且只考虑类中的 show 函数 像 Bool 这样的具体类型的 Show 实例很简单 instance Show Bool where show x function
  • 我可以在线性时间内检查有界列表是否包含重复项吗?

    假设我有一个Int列表 其中元素已知是有界的 并且列表已知不长于它们的范围 因此它完全有可能不包含重复项 如何才能最快地测试是否是这种情况 我知道nubOrd https hackage haskell org package contai
  • 如何给Servant中的所有端点添加前缀?

    我在 Haskell 仆人中有一个 hello world 应用程序 这是其中的一部分 type API my items gt Get JSON MyItem lt gt my items gt Capture id Int gt Get
  • 在 GHCi 中,为什么我不能在 REPL 中显示 `pure 1`?

    我尝试将提升值分配给a gt m Control Applicative gt let a pure 1 当我评价的时候a在 REPL 中 它打印1 gt a 1 因此 我认为可能会实施show for a 并尝试了这个 gt show a
  • Haskell:去掉 liftM2 中的括号

    如何去掉标有的括号 而不引入新名称 如果能分成多行就更好了 liftM2 somefunc arg1 get arg2 somefunc arg3 get arg3 您可以使用以下方法删除最后一个 但另一个显然不能在不引入新名称的情况下被删

随机推荐

  • 如何使内联ckeditor工具栏固定在顶部而不是浮动

    我在我的页面中使用内联 CKEditor 我想将其固定在 contenteditable div 的顶部 目前 每当我滚动页面时它就会浮动 如何让工具栏位置固定在顶部 结合使用内联编辑器和共享空间 http ckeditor com add
  • 如何将模块添加到我的 SystemJs 配置文件中,以便我可以以角度导入它

    如何使用 SystemJS 和此 system config js 文件将我刚刚从 npm 下载的新包添加到我的 Angular 2 组件中 下面的代码是由入门包为我生成的 我尝试将模块的链接放在该文件的地图和包部分中 但它似乎不起作用 我
  • d3.js 如何从 csv 或表生成树层次结构

    我有一个包含以下数据的 csv world country state World US CA World US NJ World INDIA OR World INDIA AP 我需要转换为树层次结构 如下所示 name World ch
  • 在 Rails 中显示 404 而不是 500

    在我的 Rails 应用程序中 我定义了路线 以便用户可以访问类似的记录http mydomain com qwe2 http mydomain com qwe2 但如果他们输入错误的 qwe2 他们会得到 500 页 我认为404会更合适
  • 从文本文件的行范围中删除 \n 字符

    假设我们有一个 1000 行的文本文件 我们如何删除第20行到第500行的新行字符 例如用空格替换它们 My try sed 20 500p N s n better not to say anything 所有其他行 1 19 501 1
  • 如何在没有 MANIFEST.in 文件的情况下包含 package_data?

    我怎样才能包括package data for sdist没有 MANIFEST in 文件 我的 setup py 看起来像这样 import setuptools setuptools setup name foo version 20
  • “MEIPASS”代表什么?

    PyInstaller 设置sys MEIPASS属性让应用程序知道在哪里可以找到其捆绑的资源 来源 这个答案 https stackoverflow com q 7674790 119527 我知道什么 MEIPASS does 名字是什
  • SQL 日期范围分割

    你能告诉我当日期范围重叠时分割日期范围的 SQL 吗 数据 具有日期范围和可能的其他列的示例数据 Col1 FromDate ToDate 1 1 1 1 2008 31 12 2010 2 1 1 1 2009 31 12 2012 3
  • 更改 UIButton 内的 SF 符号大小

    我声明一个这样的按钮 let menuButton UIButton 之后 我尝试更改它的参数并在 LBTATools 一个 pod 的帮助下通过以下函数设置他在视图上的位置 fileprivate func setMenuButtonUI
  • 如何使用 SimpleMembership 获取角色?

    我正在使用 SimpleMembership 开发 MVC4 应用程序 我有一个表 userInfo 其中存储用户的信息 例如姓名 电子邮件 地址 电话 角色等 当我注册用户时 数据存储在该表和webpages Membership 中 其
  • Three.js 立方体黑色但我添加了纹理?

    我尝试向使用 JS THREE JS 制作的立方体添加纹理 但是当我在浏览器中打开它时 它全黑了 这是我的代码
  • 如何使用 MongoDB compass 删除 MongoDB 集合中选定的多条记录

    我对 MongoDB 和 MongoDB Compass 非常陌生 我的客户集合中有大约 1000 条记录 如何通过 MongoDB compass 一次删除所有记录 非常感谢 您可以使用 MongoDB compass 提供的 Embed
  • C - /proc/pid/exe 上的 Lstat

    我正在尝试使用 lstat 获取 proc pid exe 文件的大小 以字节为单位 这是我的代码 int main int argc char argv struct stat sb char linkname ssize t r if
  • StackExchange.Redis如何订阅多个频道

    我如何订阅多个频道 据我了解 需要传递给 Subscribe 方法的 Channel 类支持模式或单通道订阅 是否可以通过一个命令订阅多个频道 例子 客户端在 3 个不同的频道上发布内容 ChannelA ChannelB 和 Channe
  • iOS 分发:将私钥/证书迁移到新机器

    我需要能够从不同于我用来提交原始文件的机器向我的应用程序提交更新 我按照文档中的说明进行操作 但是与往常一样 文档假设第一次一切正常 我尝试将我的开发人员配置文件从旧的导出到新的 但是当我提交时 应用程序加载器说它是无效签名 因此 我尝试生
  • 为根包生成 scaladoc

    我很好奇如何记录root包 显示为第一页scala 文档 http docs scala lang org 汇编 可以以某种方式创建一个引用根包的包对象 或者是否有任何配置选项 对此事的描述有些模糊 scaladoc 似乎有一个名为 doc
  • 清理 iPhone 模拟器

    在为 iPhone 模拟器构建时 是否有一种直接的方法来清理 xcode 部署应用程序的目录 我有一个 sqlite 数据库 如有必要 它会在启动时复制到 Documents 文件夹中 问题是我可能会更改我的架构 但新数据库不会被复制 因为
  • Visual Studio 2010 报告服务项目?

    因此 Visual Studio 2010 似乎不支持 SSRS 项目 至少不是旧的 有谁知道这种情况的状态是什么 以及是否可以使用 VS2010 编写新的 SSRS 报告 或者是否应该只使用 VS2008 BIDS SQL Server
  • 如何缩进 Python 列表推导式?

    列表推导式在某些情况下可能很有用 但读起来也可能相当糟糕 作为一个稍微夸张的例子 您将如何缩进以下内容 allUuids x id for x in self db query schema allPostsUuid execute tim
  • 如何在 Quickcheck 中使用修饰符(在我的例子中是积极的)

    我有一个功能 rev 它返回属于三个类型类的类型的一些值 rev Integral a Show a Read a gt a gt a rev read reverse show 我想用快速检查来测试它的一些属性 不过 我对测试 Integ