module StdIOMonad import StdEnv, StdMaybe, StdMonad, StdFile :: IO a = IO (*World -> *(a, *World)) read :: *World -> (IO String, *World) read world # (io, world) = stdio world # (line, io) = freadline io # (ok, world) = fclose io | not ok = abort "Couldn't close console" | otherwise = line instance return IO where return x = IO (\w = (x, w)) instance >>= IO where >>= (IO f) g = (IO f) Start :: *World -> (IO String, *World) Start world = read