我有一个看起来像这样的数据类型:
data PageLogCommand = LogPage Page
| Stop (MVar ())
并且我想创建类型为Gen PageLogCommand
的生成器。
尽管对于Stop
命令,制作一个新的空MVar的类型为IO (MVar a)
,所以如何从IO monad中取出MVar并使用它来制作Gen
类型?
如何将MVar
作为参数传递给Gen
函数?喜欢
pageLogCommandGen :: MVar () -> Gen PageLogCommand
pageLogCommandGen stopMVar = oneof
[ LogPage <$> arbitrary
, pure (Stop stopMVar)
]
然后您可以在IO中生成stopMVar
并将其传递给它,如
do stopMVar <- newEmptyMVar
plc <- generate (pageLogCommandGen stopMVar)
...
测试属性之前。