sách gpt4 ai đã đi

haskell - 单子(monad) m => a -> [a -> m a] -> m a

In lại 作者:行者123 更新时间:2023-12-03 15:27:17 29 4
mua khóa gpt4 Nike

我是 Haskell 的新手,我想知道是否有比 Hoogle 更好的方法来确定一个库功能是否重复?

举个例子:我有很多函数f :: Monad a => a -> m a我想链接在一起,比如

f1234 x = (return x) >>= f1 >>= f2 >>= f3 >>= f4

但我宁愿写
chain :: Monad m => a -> [a -> m a] -> m a
chain = foldl (>>=) <$> return
f1234 = (flip chain) [f1, f2, f3, f4]

看起来很基础,基础库是否提供了相当于 chain 的东西? ?

1 Câu trả lời

Hoogle 对此很有用,而且绝对是查找具有相同类型的函数的正确工具。

鉴于它很简单,而且它没有出现在任何常见的地方,你不妨自己编写它,就像从某个不起眼的模块中导入它一样,部分原因是你不会导入一大堆其他东西。

(另外:有些包似乎无法从 hoogle 中搜索到,因此,如果您知道您所追求的功能、模块或包名称而 hoogle 不知道,请使用 hayoo。)

我想插

(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c)

Từ Control.Monad .这是我一直想要的合成运算符,直到我找到它为止。与 >>= 相比,使用 monad 是一种更自然的方式。在我看来。

你甚至可以直接使用它,它是如此清晰:
f1234 = f1 >=> f2 >=> f3 >=> f4

如果你 hoogle 为 (a -> m a) -> (a -> m a) -> (a -> m a),它就会出现,因此,如果您正在寻找结合了某物列表的东西,那么 future 的策略是搜索一个结合了两者的函数并使用 fold 中的一个。功能。

因此
chain' :: Monad m => [a -> m a] -> a -> m a
chain' = foldr (>=>) return

f1234 = chain' [f1,f2,f3,f4]

hoặc
chain'' :: Monad m => a -> [a -> m a] -> m a
chain'' = flip $ foldr (>=>) return

如果你愿意,但无论如何你的都很好。

关于haskell - 单子(monad) m => a -> [a -> m a] -> m a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755655/

29 4 0
Bài viết được đề xuất: sql - 如何从备份更新数据表的单列
Bài viết được đề xuất: Eclipse 突然关闭
Bài viết được đề xuất: crash - Xamarin 安卓 : Application crashed after clear data in Settings
Bài viết được đề xuất: haskell - 在多行 block 中设置 GHCi 提示
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com