我试图在一些嵌套列表上运行QuickCheck,看起来像这样:
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
Run Code Online (Sandbox Code Playgroud)
所以公式是一个文字列表,每个文字都包含一个谓词和一些参数; 谓词/参数是每个字符串形式的约束分离的值.这给了我们一份列表清单列表,p!
如果我的一个QuickCheck属性失败,我倾向于得到一个难以理解的页面输出.在尝试收缩之前,我曾经通过使用只能生成一小组(小)值的任意实例来解决这个问题.为我的每个类型实现收缩功能似乎有点帮助,但没有我想要的那么多.我仍然得到一页输出.
我认为我想要收缩的是一个小文字列表,其中每个文字都有一个小的值列表,而这些值又有很少的约束,每个约束都尽可能短.但在我目前的努力中,至少这些列表变得足够大,使输出变得可怕.如果我尝试调整缩小实现,我也发现QC开始花费很长时间(寻找收缩?),这会削弱我有效收缩的努力.
当您嵌套这样的数据时,如何提高理解QuickCheck失败的几率?
我想为我的webapp实现'graceful shutdown'命令(而不是我的第一直觉,就是要求人们杀死进程)
我的前两次尝试包括
liftIO exitSuccessE.yield (responseLBS statusOK [G.contentType "text/plain"] "") E.EOF两者都只是愉快地将结果返回给客户端并继续收听.应用程序可以做什么来杀死服务器?这甚至是一件合理的事情吗?
我承认我对iteratee没有很强的理解,只知道我可以消耗我的输入并且Iteratee是一个MonadIO实例.