Haskell 为什么这个变量超出范围?(哈斯克尔)

Haskell 为什么这个变量超出范围?(哈斯克尔),haskell,syntax,scope,mutable,Haskell,Syntax,Scope,Mutable,我会马上开始的(我删除了一堆无关的代码,以防这看起来有点滑稽——试图让它成为一个MCVE): import System.IO 进口管制 导入数据.IORef main::IO() main=do hSetBuffering标准输出无缓冲 输入行您可以将x设置为一个参数 import System.IO import Control.Monad import Data.IORef main :: IO () main = do hSetBuffering stdout NoBuffer

我会马上开始的(我删除了一堆无关的代码,以防这看起来有点滑稽——试图让它成为一个MCVE):

import System.IO
进口管制
导入数据.IORef
main::IO()
main=do
hSetBuffering标准输出无缓冲

输入行您可以将
x
设置为一个参数

import System.IO
import Control.Monad
import Data.IORef

main :: IO ()
main = do
    hSetBuffering stdout NoBuffering 

    input_line <- getLine
    let input = words input_line
    let x0 = read (input!!0) :: Int
    x <- newIORef x0
    loop x

loop :: Int -> IO ()
loop x = do
    input_line <- getLine
    let the_dir = input_line :: String 

    putStrLn $ show x

    loop

你能让
loop
接受一个输入参数并将
x
传递给它吗?我不知道怎么做,但我认为这是一种有效的方法。更重要的是,你想做什么需要
IORef
之类的?我有一个游戏循环,反复运行,我需要读取输入并相应地更新值/输出,我不知道如果一切都是不变的,你该怎么做。也许您可以用上面的内容更新您的问题,并提供一些示例数据,以便我们可以看到解决此问题的另一个解决方案?这不会进行类型检查。上面,
x
是一个
IORef Int
,然后用作
字符串。不过,只要稍微多做一点工作,它就应该可以工作了。@chi我将参数更改为IORef Int——如何让它打印出来?我试着打印$x
打印(readIORef x)
等等,什么都没有working@user8930358试试
print=@chi我必须用空格分隔符在同一行上打印其中两个,具体地说,will
print=看起来像
printf“%d%d”x_out y_out
在执行
x_out之后工作
import System.IO
import Control.Monad
import Data.IORef

main :: IO ()
main = do
    hSetBuffering stdout NoBuffering 

    input_line <- getLine
    let input = words input_line
    let x0 = read (input!!0) :: Int
    x <- newIORef x0
    loop x

loop :: Int -> IO ()
loop x = do
    input_line <- getLine
    let the_dir = input_line :: String 

    putStrLn $ show x

    loop
import Control.Monad

...

    x <- newIORef x0
    forever $ do
        input_line <- getLine
        let the_dir = input_line :: String 

        putStrLn $ show x