代码之家  ›  专栏  ›  技术社区  ›  Eyzuky

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

  •  0
  • Eyzuky  · 技术社区  · 6 年前

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

    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)
    

    为什么这个不起作用? 我希望能够对这种数据类型使用快速检查。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lee    6 年前

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

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