相关疑难解决方法(0)

当Tree实现可折叠折叠图时,Foldr/Foldl是免费的吗?

我是Haskell的初学者,并且从"了解你一个Haskell"中学到了一些我对Foldable的Tree实现不了解的东西.

instance F.Foldable Tree where  
    foldMap f Empty = mempty  
    foldMap f (Node x l r) = F.foldMap f l `mappend`  
                             f x           `mappend`  
                             F.foldMap f r  
Run Code Online (Sandbox Code Playgroud)

引用来自:LYOH:"因此,如果我们只为某种类型实现foldMap,我们可以免费获得该类型的foldr和foldl!"

有人可以解释一下吗?我不明白为什么以及如何免费获得foldr和foldl ..

haskell fold foldable

16
推荐指数
2
解决办法
917
查看次数

QuickCheck是否可以生成任意函数

我试图为身份编写一个 QuickCheck 测试

f $ y = f y
Run Code Online (Sandbox Code Playgroud)

我最初的计划是编写一个返回函数和整数的任意生成器,具有签名Gen (Int -> Int, Int)

并且在prop_DollerDoesNothing测试中,带/不带函数应用程序$给出相同的结果。

这是我的代码:

  prop_DollarDoesNothing :: Property
  prop_DollarDoesNothing =
    forAll arbitraryFuncInt (\(f, y) -> (f $ y) == (f y))

  arbitraryFuncInt :: Gen (Int -> Int, Int)
  arbitraryFuncInt = do
    f <- elements [(\x -> x*2), (\x -> x+3), (\x -> x-2)]
    y <- arbitrary :: Gen Int
    return (f, y)
Run Code Online (Sandbox Code Playgroud)

它生成了以下有用的错误消息:

    * No instance for (Show (Int -> Int))
        arising from a …
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck

4
推荐指数
1
解决办法
1567
查看次数

标签 统计

haskell ×2

fold ×1

foldable ×1

quickcheck ×1