如何查看haskell中typeClass函数的默认实现?

发布于 2022-09-12 00:59:15 字数 997 浏览 24 评论 0

有如下这个例子:

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 所有的函数的类型,确无法看到默认实现,有什么办法可以得知默认实现呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

纵性 2022-09-19 00:59:15

hakell 绝大多数代码就是 hashell 实现的,所以你可以看源码:

foldr :: (a -> b -> b) -> b -> t a -> b
foldr f z t = appEndo (foldMap (Endo #. f) t) z

https://github.com/ghc/ghc/bl...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文