Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Javascript遍历实现中的应用程序在哪里?_Javascript_Haskell_Functional Programming_Traversable - Fatal编程技术网

我的Javascript遍历实现中的应用程序在哪里?

我的Javascript遍历实现中的应用程序在哪里?,javascript,haskell,functional-programming,traversable,Javascript,Haskell,Functional Programming,Traversable,我试图理解Haskell的遍历函数并用Javascript实现它,但我被卡住了。当我看到它的类型(Functor t,Foldable t,Applicative f)=>(a->fb)->ta->f(tb),我知道我需要(在JS中映射),(在JS中ap)和fold来实现它 我想出了以下代码: //教堂编码的标识新类型 常数Ident=x=>f=>f(x); 常量遍历=map=>ft=>tx=>map(y=>Ident(y))(tx(x=>ft(x)); //列表函子 map=f=>xs=>x

我试图理解Haskell的
遍历
函数并用Javascript实现它,但我被卡住了。当我看到它的类型
(Functor t,Foldable t,Applicative f)=>(a->fb)->ta->f(tb)
,我知道我需要
在JS中映射
),
在JS中ap
)和
fold
来实现它

我想出了以下代码:

//教堂编码的标识新类型
常数Ident=x=>f=>f(x);
常量遍历=map=>ft=>tx=>map(y=>Ident(y))(tx(x=>ft(x));
//列表函子
map=f=>xs=>xs.map(f);
//助手
I=x=>x;
//资料
idA=识别号(1);
idB=标识(空);
//跑
常数r1=遍历(映射)(x=>x==null?[]:[x])(idA);//[识别号(1)]
常数r2=遍历(映射)(x=>x==null?[]:[x])(idB);//[]
console.log(r1[0](I));//1.

console.log(r2);//[]
我想你把这两种类型弄混了。(虽然我猜
Ident
Array
都是可遍历的,也是可应用的函子),但通常
Array
是被遍历的,而
Ident
是可应用的。所以
(a->Ident b)->[a]->Ident[b]
更为常见,因为
Ident(x)
f=>f(x)
,我认为这是
continue r
延续函子(和单子),而不是恒等函子(和单子)。我错了吗?
tx(x=>ft(x))
太具体了,只针对
Ident
。尝试为通用可遍历和应用程序实现它。在我看来(我的JS非常脆弱)是正确的。但这是一个非常特殊的情况。您可以仅使用“列表”的功能来实现
Ident
(只包含一个值)的可遍历性。如果你遍历一个可以存储零个或多个值的结构,你将需要完整的应用程序设备。@pigworker,Bergi:所以我想我没有完全走错方向,但我的示例太具体了,没有意义。我将为其他类型实现它,并派生一个更通用的解决方案。非常感谢。我想你把这两种类型弄混了。(虽然我猜
Ident
Array
都是可遍历的,也是可应用的函子),但通常
Array
是被遍历的,而
Ident
是可应用的。所以
(a->Ident b)->[a]->Ident[b]
更为常见,因为
Ident(x)
f=>f(x)
,我认为这是
continue r
延续函子(和单子),而不是恒等函子(和单子)。我错了吗?
tx(x=>ft(x))
太具体了,只针对
Ident
。尝试为通用可遍历和应用程序实现它。在我看来(我的JS非常脆弱)是正确的。但这是一个非常特殊的情况。您可以仅使用“列表”的功能来实现
Ident
(只包含一个值)的可遍历性。如果你遍历一个可以存储零个或多个值的结构,你将需要完整的应用程序设备。@pigworker,Bergi:所以我想我没有完全走错方向,但我的示例太具体了,没有意义。我将为其他类型实现它,并派生一个更通用的解决方案。非常感谢。