交换两个 IORef 的值

问题描述 投票:0回答:1

我需要这个功能:

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
   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^...
function haskell functional-programming reference swap
1个回答
0
投票

看起来只是一个缩进错误:

swapIORefs x y = do
    let xvalue = readIORef x
    let yvalue = readIORef y
    writeIORef x yvalue
    writeIORef y xvalue

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.