如何生成使用MVar的数据类型?

问题描述 投票:0回答:1

我有一个看起来像这样的数据类型:

data PageLogCommand = LogPage Page
                    | Stop (MVar ())

并且我想创建类型为Gen PageLogCommand的生成器。

尽管对于Stop命令,制作一个新的空MVar的类型为IO (MVar a),所以如何从IO monad中取出MVar并使用它来制作Gen类型?

haskell generator quickcheck
1个回答
0
投票

如何将MVar作为参数传递给Gen函数?喜欢

pageLogCommandGen :: MVar () -> Gen PageLogCommand
pageLogCommandGen stopMVar = oneof
  [ LogPage <$> arbitrary
  , pure (Stop stopMVar)
  ]

然后您可以在IO中生成stopMVar并将其传递给它,如

do stopMVar <- newEmptyMVar
   plc <- generate (pageLogCommandGen stopMVar)
   ...

测试属性之前。

© www.soinside.com 2019 - 2024. All rights reserved.