【发布时间】:2017-08-07 15:07:58
【问题描述】:
上下文
我有以下功能:
prop_SignAndVerify :: (PrivKey a b) => Blind a -> BS.ByteString -> Bool
prop_SignAndVerify bsk msg = case verify pk msg sig of
Left e -> error e
Right b -> b
where
sk = getBlind bsk
pk = toPublic sk
sig = case sign sk msg of
Left e -> error e
Right s -> s
我想做这样的事情:
-- instance PrivKey RSA.PrivateKey RSA.PublicKey where...
genRSA :: Gen RSA.PrivateKey
genRSAMessage :: Gen BS.ByteString
main = do
quickCheck . verbose
$ forAll genRSA
$ forAll genRSAMessage prop_SignAndVerify
也就是说,我想使用显式生成器来为prop_SignAndVerify的参数中的Blind a和BS.ByteString生成任意值。
但是,上面的代码不起作用,因为函数 forAll 具有类型签名:
forAll :: (Show a, Testable prop) => Gen a -> (a -> prop) -> Property
这个函数运行生成器并将生成的任意值苹果到(a -> prop),返回一个Property。但是,此Property 不能进一步部分应用;它隐藏了底层功能。
我认为我们需要上述工作是这样的:
forAll' :: (Show a, Testable prop) => Gen a -> (a -> prop) -> prop
问题
所以我的问题是,我如何在prop_SignAndVerify 的参数上使用genRSA 和genRSAMessage,或者是否有替代方法?
谢谢
【问题讨论】:
标签: haskell typeclass quickcheck