创建一个"类型"的任意内容

sky*_*ker 0 testing haskell functional-programming functional-testing quickcheck

我有以下,

type Pos = (Int, Int) 
Run Code Online (Sandbox Code Playgroud)

我想生成这种类型的随机值,但有一些限制(两者都必须是0-8)

我想做点什么

instance Arbitrary Pos where
  arbitrary = do x <- choose(0,8) 
                 y <- choose(0,8)
                 return (x,y) 
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中使用它来获得有效的职位.

这不会起作用bc我是别名(?)元组

我试过的其他方法是在我的测试中使用含义来说

prop_my_prop (x,y) = abs x < 9  && abs y < 9 ==> ...
Run Code Online (Sandbox Code Playgroud)

但我认为这很丑陋,理论上它可能会耗尽快速检查(运行超过1000次).

这是一项任务,所以我只想要一些指示来看待或如何处理这个,我不允许改变Pos.

Don*_*art 6

这不会起作用bc我是别名(?)元组

对,那是正确的.定义新数据类型,您可以拥有一个新实例.

data Pos = Pos Int Int 
Run Code Online (Sandbox Code Playgroud)

要么

newtype Pos = Pos (Int, Int)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用你喜欢的任何生成器编写自己的任意实例.