【发布时间】:2020-08-13 07:39:05
【问题描述】:
我尝试在 JavaScript 中实现 Functor。
Functor的定义图如下:
或在 nLab 中
https://ncatlab.org/nlab/show/functor
在这里,如您所见,F(f) 表达式在类别图中看起来很典型。
我设法在 JavaScript 中将 Array.map 实现为 Functor,如下所示:
const compose = f => g => x => g(f(x));
const f = a => a * 2;
const F = a => [a];
const A = 1;
const FA = F(A); //[1]
const Ff = compose(f)(F);
const FB = Ff([FA]);
console.log(FB); //[2]
F = a => [a]
当A = 1,
F(1) = [1]
不过,虽然我明白F(f) 的意思,
F(f) = [f]
至少在 JavaScript 中不能作为函数工作。 .
其实只有我能想到的比较合适的就是函数组合了,比如:
compose(f)(F).
我也是
FB = Ff([FA])
然而,为了让它工作,我认为这个表达式巧妙地只适用于数组,而在其他情况下,事情就会出错。
所以,这是我的问题。
虽然我了解 F(A) 、 F(B) 和 F(B) 的建议,实际上 F(A) 、 F(B) 有效,但 F(f) 不必是不直接应用的函数的组合?
或者,在范畴论中,它是否允许将f 和g 的函数组合表达为只是g(f)
隐含的??
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: javascript haskell functor category-theory