Совсем по-простому (ооочень упрощенно)
module Main where
import System.IO
main :: IO ()
main = do
content <- readFile "file.dat"
putStrLn content
putStr "enter x = "
-- Флюшим вывод не забываем про ленивость языка
hFlush stdout
x <- getLine
print (read x :: Int)
writeFile "file.dat" x
Остальное сам в рамках понимания языка.
О Haskell по-человечески (Д.Шевченко)
https://www.ohaskell.guide
А.Холомьев (более продвинутое)
https://anton-k.github.io/ru-haskell-book/book/hom...
Ну и Липовача
learnyouahaskell.com есть на русском
Уилл Курт "Программируй на haskell" тоже.
Все остальное (а это мноого чего) скорее для тех кому это нужно.
В любом случае можно поискать ответы тут
https://wiki.haskell.org/Haskell
Например начать с
https://wiki.haskell.org/Introduction_to_IO там далее есть секция
Further reading
Надо вот это --> For a comprehensive tutorial on using IO monad, look at the Haskell I/O inside: Down the Rabbit's Hole