diff options
author | Camil Staps | 2017-10-02 20:13:38 +0200 |
---|---|---|
committer | Camil Staps | 2017-10-02 20:13:38 +0200 |
commit | 592dd55a70bcf3a159c32f07c698b3cc39b0d02a (patch) | |
tree | b638066e63ce356c50f383cc0478ad194dedde9b /assignment-4/student.icl | |
parent | Bootstrap 4 (diff) |
Cleanup bootstrap
Diffstat (limited to 'assignment-4/student.icl')
-rw-r--r-- | assignment-4/student.icl | 65 |
1 files changed, 31 insertions, 34 deletions
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
-
|