程序启动后,Haskell中的"常量"

Max*_*x K 1 haskell types constants

我有一个键盘输入unsafePerformIO $ entryGetText myTextEntry.如何将此值保存为"常量"(在数据类型中,如下所示:

data SimuInfo = Information {
                massSaved:: Double 
                } deriving Show
Run Code Online (Sandbox Code Playgroud)

)程序启动后.我知道"保存变量"的唯一方法是:

valuea::Int
valuea = 120
Run Code Online (Sandbox Code Playgroud)

但是,当用户未定义该值时,此方法才有效.

提前致谢

Cha*_*ert 7

unsafePerformIO应该不惜一切代价避免,因为它的执行是不可预测的.

Haskell是一种纯语言,值是不可变的,因此您将无法"保存"在其他地方显示为变异的值.

相反,您需要读取值并根据需要传递它.

main = do  
    putStrLn "Enter the default massSaved value"  
    val <- getLine
    doThingsWithDefaultSimuInfo (Information (read val :: Double))

doThingsWithDefaultSimuInfo :: SimuInfo -> IO ()
doThingsWithDefaultSimuInfo si = do
    ...
Run Code Online (Sandbox Code Playgroud)

(对于读者来说,有更清晰,更惯用的方法可以做到这一点,但我试图将这个答案针对初学者级别)

  • 因为在答案中已经提到了两次,所以我想提一下,将参数传递给函数是一种非常干净且惯用的方法(IMHO`Reader`很少将其作为抽象的重量) (3认同)