From 592dd55a70bcf3a159c32f07c698b3cc39b0d02a Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 2 Oct 2017 20:13:38 +0200 Subject: Cleanup bootstrap --- assignment-4/student.icl | 65 +++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 34 deletions(-) (limited to 'assignment-4/student.icl') diff --git a/assignment-4/student.icl b/assignment-4/student.icl index fad269e..0356a04 100644 --- a/assignment-4/student.icl +++ b/assignment-4/student.icl @@ -2,9 +2,9 @@ module student import StdEnv, StdMaybe, monad /* - Pieter Koopman, pieter@cs.ru.nl - Advanced Programming, week 4 -*/ + * Pieter Koopman, pieter@cs.ru.nl + * Advanced Programming, week 4 + */ // ---- an IO monad with maybe results --- // @@ -33,7 +33,7 @@ class read a :: IO a instance read String where read = IO r where - r s + r s #! {w,c=Just c} = open s (line, c) = freadline c s = rmNL line @@ -76,19 +76,17 @@ instance Functor IO where (Nothing,s) = (Nothing , s) instance Applicative IO where - pure a = IO \s.(Just a, s) - (<*>) (IO f) (IO g) - = IO \s.case f s of - (Just f,s) = case g s of - (Just a,s) = (Just (f a),s) - (n, s) = (Nothing, s) - (n, s) = (Nothing, s) + pure a = IO \s.(Just a, s) + (<*>) (IO f) (IO g) = IO \s.case f s of + (Just f,s) = case g s of + (Just a,s) = (Just (f a),s) + (n, s) = (Nothing, s) + (n, s) = (Nothing, s) instance Monad IO where - bind (IO f) g - = IO \s.case f s of - (Just a, s) = unIO (g a) s - (n, s) = (Nothing, s) + bind (IO f) g = IO \s.case f s of + (Just a, s) = unIO (g a) s + (n, s) = (Nothing, s) instance fail IO where fail = IO \s.(Nothing,s) @@ -114,29 +112,29 @@ instance + String where + s t = s +++ t f0 :: *World -> (Student, *World) f0 world = ({fname = rmNL fname, lname = rmNL lname, snum = snum}, world2) where - (console1, world1) = stdio world - console2 = console1 <<< "Your first name please: " - (fname,console3) = freadline console2 - console4 = console3 <<< "Your last name please: " - (lname,console5) = freadline console4 - console6 = console5 <<< "Your student nmber please: " - (b1,snum,console7) = freadi console6 - (b2, world2) = fclose console7 world1 + (console1, world1) = stdio world + console2 = console1 <<< "Your first name please: " + (fname,console3) = freadline console2 + console4 = console3 <<< "Your last name please: " + (lname,console5) = freadline console4 + console6 = console5 <<< "Your student nmber please: " + (b1,snum,console7) = freadi console6 + (b2, world2) = fclose console7 world1 f1 :: *World -> (Student, *World) f1 world - #! (console, world) = stdio world - console = console <<< "Your first name please: " - (fname,console) = freadline console - console = console <<< "Your last name please: " - (lname,console) = freadline console - console = console <<< "Your student nmber please: " - (b1,snum,console) = freadi console - (b2, world) = fclose console world - = ({fname = rmNL fname, lname = rmNL lname, snum = snum}, world) +#! (console, world) = stdio world + console = console <<< "Your first name please: " + (fname,console) = freadline console + console = console <<< "Your last name please: " + (lname,console) = freadline console + console = console <<< "Your student nmber please: " + (b1,snum,console) = freadi console + (b2, world) = fclose console world += ({fname = rmNL fname, lname = rmNL lname, snum = snum}, world) f2 :: IO String -f2 +f2 = ( write "Your first name please: " >>| read >>= \fname.write "Your last name please: " @@ -153,4 +151,3 @@ rmNL string | len > 0 && string.[len-1] == '\n' = string % (0, len - 2) = string - -- cgit v1.2.3