Haskell 如何快速检查任意函数

Haskell 如何快速检查任意函数,haskell,Haskell,我对哈斯凯尔很陌生,我想检查一下我的一项功能。 功能类型为 treeValidate :: forall a. Ord a => BST a -> Bool 我如何验证这一点?我尝试了quickChekc treeValidate,但出现了以下错误:•没有(任意(BST a0))的实例 因使用“快速检查”而产生 “编辑”修复了错误消息中的一个键入错误。您需要为您的类型编辑。@WillemVanOnsem说您需要一个任意实例。您回答“是的,但是它是如何在快速检查中键入的?” 我不明白

我对哈斯凯尔很陌生,我想检查一下我的一项功能。 功能类型为

treeValidate :: forall a. Ord a => BST a -> Bool
我如何验证这一点?我尝试了quickChekc treeValidate,但出现了以下错误:•没有(任意(BST a0))的实例 因使用“快速检查”而产生


“编辑”修复了错误消息中的一个键入错误。

您需要为您的类型编辑。

@WillemVanOnsem说您需要一个任意实例。您回答“是的,但是它是如何在快速检查中键入的?”

我不明白你对这个问题的回答。事实是,你必须写:

instance Arbitrary a => Arbitrary (BST a) where
    arbitrary = -- your code here

其中,
此处的代码
是您为生成任意(随机)值(类型为
BST a

而编写的任意值的定义,您将
BST
BHP
)作为
任意
的实例。是的,但它是如何在快速检查中键入的?我试过:quickChekc(treeValidate::BST Int->Bool),但这也不起作用。什么是
BST
数据类型?这是一个二进制搜索树。如果你像现有答案建议的那样编写一个
任意
实例,要使用
quickCheck
,你需要考虑要测试哪些属性
quickCheck(\t->treeValidate(t::BST Int))
仅根据
treeValidate
检查
任意
实例生成的所有树是否有效,但您可能希望在
任意
实例中生成有效树,然后使用
treeValidate
测试其他函数;e、 g.如果您有一个函数
insert
,请使用
quickCheck$\x t->treeValidate$insert(x::Int)(t::BST Int)
验证
insert
是否保留有效性。