【问题标题】:Generate choose on custom data type with 2 options使用 2 个选项生成自定义数据类型的选择
【发布时间】:2018-11-24 13:12:28
【问题描述】:

我正在尝试实现一些非常简单的事情。 我有这种数据类型:

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。

【问题讨论】:

    标签: haskell quickcheck


    【解决方案1】:

    choose 具有Random a => (a, a) -> Gen a 类型,因此choose (G, B) 需要Random 实例作为Letter 类型。如果你想从一组值创建一个生成器,你可以使用 elements 代替:

    arbitraryLetter :: Gen Letter
    arbitraryLetter = elements [G, B]
    

    【讨论】:

    • 谢谢,如何生成 1 并打印到控制台?我尝试运行任意字母并得到一个错误: • 没有因使用“打印”而产生的 (Show (Gen Letter)) 实例 • 在交互式 GHCi 命令的 stmt 中:打印它
    • @Eyzuky - 您可以在 ghci 中使用 samplesample arbitraryLetter
    猜你喜欢
    • 2020-02-24
    • 2014-09-08
    • 2023-03-16
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2011-06-18
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多