-- -- -- IO -- -- -- -- IO -- print := procedure x -> do write x write "\n" flush () printToPort := procedure port x -> do writeToPort port x writeToPort port "\n" display := procedure x -> do write x flush () displayToPort := procedure port x -> do writeToPort port x eachLine := procedure proc -> do let eof := isEof () if eof then return () else do let line := readLine () proc line eachLine proc eachLineFromPort := procedure port proc -> do let eof := isEofPort port if eof then return () else do let line := readLineFromPort port proc line eachLineFromPort port proc eachFile := procedure files proc -> match files as list string with | [] -> return () | $file :: $rest -> do let port := openInputFile file eachLineFromPort port proc closeInputPort port eachFile rest proc -- -- Collection -- each := procedure proc xs -> match xs as list something with | [] -> do return () | $x :: $rs -> do proc x each proc rs -- -- Debug -- debug %expr := io do print (show expr) return expr debug2 %msg %expr := io do display msg print (show expr) return expr