有如下这个例子:
import qualified Data.Foldable as F
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
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
testTree = Node 5
(Node 3
(Node 1 Empty Empty)
(Node 6 Empty Empty)
)
(Node 9
(Node 8 Empty Empty)
(Node 10 Empty Empty)
)
对于 Tree
这个 instance 来说,我并没有定义 foldr
这个方法,但是,我在控制台中执行 F.foldr (+) 0 testTree
确可以得到 42
这个我想要的结果。那么在 F.Foldable
这个typeClass上应该是定义了 foldr
这个方法所以我才能在 instance 中未定义的情况下也能调用该方法吧,但是我使用 :info
命令去查看这个 typeClass 时只能查看到该 typeClass 所有的函数的类型,确无法看到默认实现,有什么办法可以得知默认实现呢?
hakell 绝大多数代码就是 hashell 实现的,所以你可以看源码:
https://github.com/ghc/ghc/bl...