summaryrefslogtreecommitdiff
path: root/fp2/week2/mart/ToonFileMonad.icl
blob: acd62c21f7250ca8cf3d2358d1d042db45e8483e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
module ToonFileMonad

import StdArray, StdInt, StdString	// expliciete imports van StdEnv om name-clash met StdFunc en StdIOMonad te voorkomen
import StdIOMonad
import StdMaybeMonad

Start :: *World -> (Void,*World)
Start world = doIO toon world

toon :: IO Void
toon = write "Voer een filenaam in: " >>= \_ ->
       read                           >>= \filenaam ->
       open (filenaam%(0,size filenaam-2)) Lees >>= \misschien_filehandle ->
       case misschien_filehandle of
           Nothing
               = write ("Kon " +++ filenaam +++ " niet openen.\n") >>= \_ ->
                 return Void
           Just filehandle
               = toon_inhoud filehandle

toon_inhoud :: Filehandle -> IO Void
toon_inhoud filehandle
	= eof filehandle >>= \einde ->
	  if einde
	     (return Void)
	     (readline filehandle >>= \misschien_regel ->
	      case misschien_regel of
	          Nothing    = return Void
	          Just regel = write regel >>= \_ -> toon_inhoud filehandle
	     )