首页 > 解决方案 > 使用 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。

标签: haskellquickcheck

解决方案


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

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

推荐阅读