我想做一个管道和我卡住的合成功能。我设法做了一个无尖烟斗,但却搞不懂作曲。
// 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];发布于 2020-01-30 11:28:49
我最终会回答你的问题,但让我们先退一步。
需要理解的一件重要的事情是,管道方法只是函数应用。其他术语:future.pipe (f) == f (future)。
这意味着您的管道函数可以重新定义为:
const pipe = fn => future => future.pipe(fn)
//to:
const pipe = fn => value => fn (value)这个新版本的管道的工作方式完全一样,只是它适用于任何价值,而不仅仅是期货。但让我们进一步退一步。
此函数的签名如下:pipe :: (a -> b) -> a -> b。它将一个函数从A到B,并从A到B返回一个函数。
等一下..。
const pipe = fn => value => fn (value)
//to:
const pipe = fn => fn这个新的定义也是如此。只是它适用于任何东西,而不仅仅是函数。实际上,这只是身份函数。因此,咖喱(你说的是免费的,但我认为你是指咖喱)版本的future.pipe只是身份函数。
那这是为什么?因为.pipe所做的都是函数应用程序。你可以自己运用你的功能。
现在来回答你的下一个关于作曲管道的问题。实际上您要寻找的是一些函数,并按顺序应用它们。
如果你用的是兰达,那就是pipe。不过,我们可以自己实施:
const pipe = (...fns) => (...args) => fns.reduce ((args, f) => [f (...args)], args)[0]https://stackoverflow.com/questions/59978001
复制相似问题