gpt4 book ai didi

haskell - Haskell 中惯用的有状态循环

转载 作者:行者123 更新时间:2023-12-03 15:09:46 27 4
gpt4 key购买 nike

有没有一种惯用的方式来表达 Haskell 中的以下代码?

main :: IO ()
main = loop initState1 initState2 initState3

loop :: State1 -> State2 -> State3 -> IO ()
loop s1 s2 s3 = do
s1' <- runService1 s1
s2' <- runService2 s2
s3' <- runService3 s3
loop s1' s2' s3'

这段代码非常冗长,所以我可能做了一些奇怪的事情。

最佳答案

main = fix (zipWithM ($) >=>)
[runService1, runService2, runService3]
[initState1 , initState2 , initState3 ]

比较 fix . (>>=) :: IO a -> IO b ,即 forever .

编辑:这仅适用于 State1 = State2 = State3 .如果没有, data-fix允许:
main = fix (traverse unFix >=>)
[ana runService1 initState1, ana runService2 initState2, ana runService3 initState3]

关于haskell - Haskell 中惯用的有状态循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529298/

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