summaryrefslogtreecommitdiff
path: root/fp2/week2/mart/ToonFileMonad.icl
diff options
context:
space:
mode:
authorMart Lubbers2015-04-24 14:35:17 +0200
committerMart Lubbers2015-04-24 14:35:17 +0200
commita067356625105f50978443d3b0a0a5d8f6391184 (patch)
treed194d49f36232b8e5860ca557c75f11a3ac05afe /fp2/week2/mart/ToonFileMonad.icl
parentupdated practicum files (diff)
rare shit
Diffstat (limited to 'fp2/week2/mart/ToonFileMonad.icl')
-rw-r--r--fp2/week2/mart/ToonFileMonad.icl30
1 files changed, 30 insertions, 0 deletions
diff --git a/fp2/week2/mart/ToonFileMonad.icl b/fp2/week2/mart/ToonFileMonad.icl
new file mode 100644
index 0000000..acd62c2
--- /dev/null
+++ b/fp2/week2/mart/ToonFileMonad.icl
@@ -0,0 +1,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
+ )