JavaScript 中的函子实现

smo*_*ing 6 javascript haskell functor category-theory

我尝试在 JavaScript 中实现一个 Functor。

Functor的定义图如下:

在此处输入图片说明

或在 nLab

在此处输入图片说明

https://ncatlab.org/nlab/show/functor

在这里,如您所见,F(f)表达式在类别图中看起来很典型。

我设法Array.map在 JavaScript 中实现为 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]
Run Code Online (Sandbox Code Playgroud)

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) 含蓄?

smo*_*ing 0

在我这里得到了很多答案并且对它们不满意之后,我自己解决了。

就nLab中的图表而言:

在此输入图像描述

这里,X,Y,Z实际上是恒等态射。

所以X、Y、Z和f、g、h的类型是相同的。

因此,我们可以写F(f)F(X)一致。

根据这个质量检查流程,尽管许多人从未提及也不同意我最初的回应,但这似乎是一个已知的事实。

https://mathoverflow.net/questions/336533/why-is-an-object-not-define-as-identity-morphism

https://ncatlab.org/nlab/show/single-sorted+definition+of+a+category

从范畴的单序定义来看,对象X,Y,Z是恒等态射。