7f112a7bbc55517f87a81018e0fb329264ab361a
[fp1415.git] / fp2 / week2 / mart / StdIOMonad.icl
1 module StdIOMonad
2
3 import StdEnv, StdMaybe, StdMonad, StdFile
4
5 :: IO a = IO (*World -> *(a, *World))
6
7 read :: *World -> (IO String, *World)
8 read world
9 # (io, world) = stdio world
10 # (line, io) = freadline io
11 # (ok, world) = fclose io
12 | not ok = abort "Couldn't close console"
13 | otherwise = line
14
15 instance return IO where
16 return x = IO (\w = (x, w))
17
18 instance >>= IO where
19 >>= (IO f) g = (IO f)
20
21 Start :: *World -> (IO String, *World)
22 Start world = read