我正在学习Typeclassopedia中有关Functor的部分。
一个简单的直觉是,Functor表示一种“容器”,以及能够统一地将函数应用于容器中每个元素的能力。
好的。因此,对于诸如列表或树之类的归纳类型,functor似乎非常自然。
如果元素的数量固定在较低的数量上,functor也会变得非常简单。例如,在Maybe中,您只需要关心“Nothing”或“Just a”-两件事情。
那么,如何使像图这样的可能具有循环的数据结构成为Functor的实例?更广义的说法是,非归纳类型如何“适合”Functor中?
我越想越清楚的是,归纳/非归纳并不重要。归纳类型只是更容易定义fmap
...
如果我想将图作为Functor的实例,我必须在fmap内部实现图遍历算法;例如,它可能需要使用一个帮助函数来跟踪已访问的节点。此时,我现在在思考为什么要将其定义为Functor而不是仅编写一个函数?例如,对于列表,map与fmap...?
我希望有经验、战斗经历和伤疤的人能够阐明一些问题。谢谢!