gpt4 book ai didi

haskell - 函数在参数后面写函数

转载 作者:行者123 更新时间:2023-12-02 10:05:48 24 4
gpt4 key购买 nike

我不喜欢在 haskell 中从右到左阅读函数的顺序。为了解决这个问题,我添加了一些有用的运算符。

module Main where
(>>>) :: a -> (a -> b) -> b
(>>>) a fun = fun a
main = print $ [1..10] >>> map (*2) >>> filter (>5) >>> foldr1 (+)
-- => 104

我想我可以在这里找到一个类似的内置运算符。类似于绑定(bind)运算符 (>>=)。但绑定(bind)运算符的工作方式不同,或者确切地说我不明白它是如何工作的。看来它使用了 concat 映射。但为什么呢?

我改进接线员的下一点是让他调用一次。例如:

print $ [1..10] >>> map (*2) $ filter (>5) $ foldr (+)

我尝试用 (>>>) a = a(>>>) a fun = (>>>) (fun a) 来实现,但似乎这种重载是不可能的。澄清一下,我专注于函数的学习,但仍然对 monad、类型和类一无所知。

所以我的问题是:内置运算符或正确使用绑定(bind)运算符。

最佳答案

"I don´t like to read the order of functions from right to left in haskell. To fix this, I added a little useful operator."

"still don`t know anything about monads, types and classes"

我认为在不理解语言基本概念的情况下尝试“修复”语言中的某些内容并不是一个好主意。

首先,Haskell 中有一些流行的库和函数可以提供你想要的,例如lens's & operator完全按照您的 >>> 执行的操作。其次,名称 >>> 已被 Category 占用。的(base库)实现,因此重新实现它不是一个好主意。基本上它只是组合运算符 . 的反转,但我怀疑您也不太熟悉函数组合。第三,bind (>>=) 运算符的用途与您的预期相差太远,您需要研究 monad 才能理解它。

关于haskell - 函数在参数后面写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com