我知道 Haskell 中围绕 IO 的复杂性。
其实没那么复杂。起初它可能看起来有点吓人,但你很快就会掌握它的窍门。
我怎样才能实现写功能?
一样的方法
或者我可以分开吗?
是的
另外,有没有办法让我能够命名函数加载/保存?
是的,例如,您可以像这样进行加载:
load :: IO String
load = readFile "Test.txt"
所有 Haskell 程序都在 main 内部开始,但它们不必一直呆在那里,所以你可以像这样使用它:
main :: IO ()
main = do
contents <- load -- notice we're using the thing we just defined above
putStrLn contents
请注意,这main
始终是您的程序所做的;但是您main
不仅需要做一件事。它也可以做很多事情,例如读取一个值,然后决定做什么;这是一个更复杂(完整)的示例 - 我希望您不会立即理解它的所有部分,但它至少应该给您一些可以玩的东西:
data Choice = Save | Load
pickSaveOrLoad :: IO Choice
pickSaveOrLoad = do
putStr "Do you want to save or load? "
answer <- getLine
case answer of
"save" -> return Save
"load" -> return Load
_ -> do
putStrLn "Invalid choice (must pick 'save' or 'load')"
pickSaveOrLoad
save :: IO ()
save = do
putStrLn "You picked save"
putStrLn "<put your saving stuff here>"
load :: IO ()
load = do
putStrLn "You picked load"
putStrLn "<put your loading stuff here>"
main :: IO ()
main = do
choice <- pickSaveOrLoad
case choice of
Save -> save
Load -> load
当然,想要保存或加载有点奇怪,大多数可以做这些事情的程序都想做这两者,但我不知道你到底想要什么,所以我保持它的通用性。