我正在尝试实现非常简单的目标。 我有这种数据类型:
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。
答案 0 :(得分:1)
choose
的类型为Random a => (a, a) -> Gen a
,因此choose (G, B)
的{{1}}类型需要一个Random
实例。如果要根据一组值创建一个生成器,可以使用Letter
代替:
elements