haskell - 使用 2 个选项生成自定义数据类型的选择
问题描述
我正在尝试实现一些非常简单的事情。我有这个数据类型:
import Test.QuickCheck
import System.Random
data Letter = G | B deriving(Show, Eq, Bounded)
arbitraryLetter :: Gen Letter
arbitraryLetter = choose (G,B)
我正在编译并收到此错误
• No instance for (Random Letter) arising from a use of ‘choose’
• In the expression: choose (G, B)
In an equation for ‘arbitraryLetter’:
arbitraryLetter = choose (G, B)
为什么这不起作用?我希望能够对这种数据类型使用 QuickCheck。
解决方案
choose
具有 type Random a => (a, a) -> Gen a
,因此choose (G, B)
需要Random
您的类型的实例Letter
。如果你想从一组值创建一个生成器,你可以使用elements
:
arbitraryLetter :: Gen Letter
arbitraryLetter = elements [G, B]
推荐阅读
- android - 动态包含 dagger2 模块
- flutter - 等待调试连接时出错:Bad state: No element Flutter VS Code
- python - Python lint 规则避免没有尾随逗号的单值括号
- reactjs - 键入'{ src:字符串;}' 不可分配给类型 'SVGProps
- c++ - CIP 协议:cip 协议中数据的结构和值
- unit-testing - 在 golang 中模拟依赖项是否需要 DI(依赖项注入)?
- git - 为什么按名称删除远程分支会产生错误,而按引用删除则不会?
- flutter - 在开始 Flutter 之前我需要了解 Dart
- powerbi - PowerBI-JavaScript API 中 RDL(分页)报表的过滤器(参数)
- python - Flask:确定请求发往哪个 IP 地址