谁首先说了以下几点?
monad只是endofunctors类别中的幺半群,问题是什么?
在一个不太重要的注意事项上,这是真的,如果是这样,你能给出一个解释(希望有一个可以被没有Haskell经验的人理解的那个)吗?
编程中有没有通用的函子(不限于自函子)用法?
我理解使用内函子的原因是使结构变得简单,如 monoid 或 monad。
我也最终明白,所有的值都归结为一种编程语言的类别(例如 Hask),但我在这里谈论的是同一类别的字符串、数字、布尔值或函数之间的内函子。
相关问题:
在Frisby 教授介绍可组合功能JavaScript中引入了身份仿函数:
const Box = x =>
({
map: f => Box(f(x)),
fold: f => f(x) // for testing
})
Run Code Online (Sandbox Code Playgroud)
我花了大部分时间来理解函子以及为什么上面的JavaScript代码实际上是身份函子.所以我想我会改变它以获得一个不是身份函子的"真正的"函子.我想出了这个:
const Endo = x =>
({
map: f => Endo(f(x).split('')),
fold: f => f(x).split('') // for testing
})
Run Code Online (Sandbox Code Playgroud)
我的理由是用Box,Id_Box: Box -> Box
和Id_Box f = f
.远藤也会映射到自己,但Endo(f): Endo(x) -> Endo(y)
(如果f: x -> y
).
我是在正确的轨道上吗?
编辑:替换为原始示例中string
的更通用x
.