使用 2 个选项生成选择自定义数据类型

Generate choose on custom data type with 2 options

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

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

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