Cli*_*ton 4 haskell reactive-programming
基本上,我希望能够编写如下代码:
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)
Run Code Online (Sandbox Code Playgroud)
有人可以从头开始或从库中提供一些示例代码,以便我能够实现上述类似的功能吗?
这几乎是完全的功能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
Run Code Online (Sandbox Code Playgroud)