gpt4 book ai didi

haskell - 丢弃 (>>) 翻转的一元组合

转载 作者:行者123 更新时间:2023-12-04 18:11:18 28 4
gpt4 key购买 nike

(>>)的定义功能如下:(>>) :: Monad m => m a -> m b -> m b但我想实现这个功能翻转如下:
我有一个函数tabulate :: Int -> [Int] -> IO Int它将列表打印为具有给定列数的表,并返回 IO 中所有列表项的总和单子(monad)。
之后我想要一个明确的 putStr "\n" .
如果我会使用以下内容:tabulate >> (putStr "\n")它会丢弃表格的结果,反之则不会在表格后打印换行符。
如果在 do 中执行此操作:

smth = do
let a = tabulate
putStr "\n"
a
a 以来,此操作将再次在表格前打印换行符。在 putStr 之后进行评估.
在制表功能之后如何打印换行符?

最佳答案

您可以使用 (<*) :: Applicative f => f a -> f b -> f a 这里:

smth :: IO Int
smth = tabulate 14 [2, 5] <* putStr "\n"
这相当于:
smth = do
a <- tabulate 14 [2, 5]
putStr "\n"
return a
因此它首先评估 IO Inttabulate 14 [2, 5] ,然后打印 "\n"作为 Action ,但它“返回” tabulate 的值调用,而不是 putStr称呼。

关于haskell - 丢弃 (>>) 翻转的一元组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70792384/

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