我需要这个功能:
x <- newIORef "x"
y <- newIORef "y"
swapIORefs x y
readIORef x -- Outputs "y"
readIORef y -- Outputs "x"
我最好的尝试是:
swapIORefs :: IORef a -> IORef a -> IO ()
swapIORefs x y = do let xvalue = readIORef x
let yvalue = readIORef y
writeIORef x yvalue
writeIORef y xvalue
编译器给我:
The last statement in a 'do' block must be an expression
let yvalue = readIORef y writeIORef x yvalue writeIORef y xvalue
|
51 | let yvalue = readIORef y
| ^^^^^^^^^^^^^^^^^^^^^^^^^...
看起来只是一个缩进错误:
swapIORefs x y = do
let xvalue = readIORef x
let yvalue = readIORef y
writeIORef x yvalue
writeIORef y xvalue
应该可以。