首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从流动中创建期货composePipe函数

从流动中创建期货composePipe函数
EN

Stack Overflow用户
提问于 2020-01-30 01:40:27
回答 1查看 101关注 0票数 0

我想做一个管道和我卡住的合成功能。我设法做了一个无尖烟斗,但却搞不懂作曲。

代码语言:javascript
复制
// pointfree
const pipe = fn => future => future.pipe(fn)


// compose pipes   // not working
const composePipe = (...fns) => (...args) => fns.reduceRight(  (future, fn) => future.pipe(fn), args)[0];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 11:28:49

我最终会回答你的问题,但让我们先退一步。

需要理解的一件重要的事情是,管道方法只是函数应用。其他术语:future.pipe (f) == f (future)

这意味着您的管道函数可以重新定义为:

代码语言:javascript
复制
const pipe = fn => future => future.pipe(fn)
//to:
const pipe = fn => value => fn (value)

这个新版本的管道的工作方式完全一样,只是它适用于任何价值,而不仅仅是期货。但让我们进一步退一步。

此函数的签名如下:pipe :: (a -> b) -> a -> b。它将一个函数从A到B,并从A到B返回一个函数。

等一下..。

代码语言:javascript
复制
const pipe = fn => value => fn (value)
//to:
const pipe = fn => fn

这个新的定义也是如此。只是它适用于任何东西,而不仅仅是函数。实际上,这只是身份函数。因此,咖喱(你说的是免费的,但我认为你是指咖喱)版本的future.pipe只是身份函数。

那这是为什么?因为.pipe所做的都是函数应用程序。你可以自己运用你的功能。

现在来回答你的下一个关于作曲管道的问题。实际上您要寻找的是一些函数,并按顺序应用它们。

如果你用的是兰达,那就是pipe。不过,我们可以自己实施:

代码语言:javascript
复制
const pipe = (...fns) => (...args) => fns.reduce ((args, f) => [f (...args)], args)[0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59978001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档