gpt4 book ai didi

haskell - 自动重新计算结果

转载 作者:行者123 更新时间:2023-12-04 23:52:34 27 4
gpt4 key购买 nike

基本上,我希望能够编写如下代码:

main = do
x <- newVal (2 :: Int)
y <- newVal (3 :: Int)
z <- newFunc (x, y) (\(a,b) -> a * b)
r1 <- readVal z
print r1 -- prints 6 (2 * 3)
setVal x 5
r2 <- readVal z
print r2 -- prints 15 (5 * 3)

有人可以从头开始或从库中提供一些示例代码来让我实现上述目标吗?

最佳答案

这几乎就是 STRef 的功能和 IORef ,除非我在上面的评论中提到,你不能得到一个完全多态的 newFunc .你必须做一些类似于 liftA2 的事情.

import Data.IORef

main = do
x <- newVal (2 :: Int)
y <- newVal (3 :: Int)
let z = liftIORef2 (x, y) (\(a,b) -> a * b)
r1 <- readVal z
print r1 -- prints 6 (2 * 3)
setVal x 5
r2 <- readVal z
print r2 -- prints 15 (5 * 3)

liftIORef2 (a, b) f = do
a' <- readIORef a
b' <- readIORef b
return (f (a', b'))

newVal = newIORef

setVal = writeIORef

readVal = id

*Main> main
6
15

关于haskell - 自动重新计算结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591629/

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