Мне известны сложности, связанные с IO в Haskell.
Это на самом деле не , что комплекс. Поначалу это может показаться немного пугающим, но вы быстро освоитесь.
Как я могу также реализовать функцию записи?
Точно так же
Или я могу отделить его?
Да
Кроме того, есть ли у меня возможность назвать функции load / save?
Да, например, вы можете выполнить загрузку следующим образом:
load :: IO String
load = readFile "Test.txt"
Все программы на Haskell start внутри 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
Конечно, немного странно хотеть делать или сохранять или загружать, большинство программ, которые могут делать эти вещи, хотят и , но я не знаю, что именно Вы идете, поэтому я сохранил это общее.