gpt4 book ai didi

haskell - 为什么 Functor 类型类不包含 fold 方法?

转载 作者:行者123 更新时间:2023-12-02 02:31:07 25 4
gpt4 key购买 nike

为什么类型类Functor只有成员(member)fmap ?我经常发现对数据类型执行折叠很有用。说,分层的,就像一棵树。

请注意,mapfold 的特例,即后者更为根本。我想我可以接受它,但也许是有原因的?

最佳答案

因为一个 Functor是一种非常普遍的对象;不是全部Functor s 支持折叠。比如有一个实例1

instance Functor (a ->) where
-- > fmap :: (b -> c) -> (a -> b) -> (a -> c)
fmap f g = g . f

但是,虽然 (a ->)Functor为所有 a , 对于无限 a没有合理的 fold定义。 (顺便说一下,“折叠”通常是 catamorphism,这意味着它对每个仿函数都有不同的类型。 Foldable 类型类将其定义为类似序列的类型。)。

考虑一下 foldr Integer -> Integer 的定义看起来像;最外面的应用程序是什么?会有什么值(value)
foldr (\ _ n -> 1 + n) 0 (\ n -> n + 1)

是? fold 没有合理的定义在参数类型上没有更多的结构。

1 (a ->)由于某种原因,它不是合法的 Haskell。但我还是要把它用作 (->) a 的更易读的版本。 ,因为我认为新手更容易理解。

关于haskell - 为什么 Functor 类型类不包含 fold 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com