rare shit
authorMart Lubbers <mart@martlubbers.net>
Fri, 24 Apr 2015 12:35:17 +0000 (14:35 +0200)
committerMart Lubbers <mart@martlubbers.net>
Fri, 24 Apr 2015 12:35:17 +0000 (14:35 +0200)
20 files changed:
fp2/week2/mart/EchoMonad.icl [new file with mode: 0644]
fp2/week2/mart/StdIOMonad.dcl [new file with mode: 0644]
fp2/week2/mart/StdIOMonad.icl
fp2/week2/mart/StdListMonad.dcl [new file with mode: 0644]
fp2/week2/mart/StdListMonad.icl [new file with mode: 0644]
fp2/week2/mart/StdMaybeMonad.dcl [new file with mode: 0644]
fp2/week2/mart/StdMaybeMonad.icl [new file with mode: 0644]
fp2/week2/mart/ToonFileMonad.icl [new file with mode: 0644]
fp2/week2/mart/oldold/old/Map.dcl [moved from fp2/week2/mart/Map.dcl with 100% similarity]
fp2/week2/mart/oldold/old/Map.icl [moved from fp2/week2/mart/Map.icl with 100% similarity]
fp2/week2/mart/oldold/old/Mappen.icl [moved from fp2/week2/mart/Mappen.icl with 100% similarity]
fp2/week2/mart/oldold/old/Random.dcl [moved from fp2/week2/mart/Random.dcl with 100% similarity]
fp2/week2/mart/oldold/old/Random.icl [moved from fp2/week2/mart/Random.icl with 100% similarity]
fp2/week2/mart/oldold/old/ReturnEnBind.icl [moved from fp2/week2/mart/ReturnEnBind.icl with 100% similarity]
fp2/week2/mart/oldold/old/StdIOMonad.dcl [new file with mode: 0644]
fp2/week2/mart/oldold/old/StdIOMonad.icl [new file with mode: 0644]
fp2/week2/mart/oldold/old/StdMaybeMonad.dcl [new file with mode: 0644]
fp2/week2/mart/oldold/old/StdMaybeMonad.icl [new file with mode: 0644]
fp2/week2/mart/oldold/old/StdMonad.dcl [new file with mode: 0644]
fp2/week2/mart/oldold/old/StdMonad.icl [new file with mode: 0644]

diff --git a/fp2/week2/mart/EchoMonad.icl b/fp2/week2/mart/EchoMonad.icl
new file mode 100644 (file)
index 0000000..3bcab11
--- /dev/null
@@ -0,0 +1,14 @@
+module EchoMonad\r
+\r
+import StdString               // expliciete import uit StdEnv om nameclash met StdFunc / StdIOMonad te voorkomen\r
+import StdIOMonad\r
+import StdMaybeMonad\r
+\r
+Start :: *World -> (Void,*World)\r
+Start world = doIO echo world\r
+\r
+echo :: IO Void\r
+echo = read >>= \regel ->\r
+       if (regel == "\n")\r
+          (return Void) \r
+          (write regel >>= \_ -> echo)\r
diff --git a/fp2/week2/mart/StdIOMonad.dcl b/fp2/week2/mart/StdIOMonad.dcl
new file mode 100644 (file)
index 0000000..0d451d2
--- /dev/null
@@ -0,0 +1,39 @@
+definition module StdIOMonad\r
+\r
+//     Deze module verpakt een aantal StdFile functies in een monadische jas\r
+\r
+import StdMonad, StdMaybeMonad\r
+\r
+:: IO a\r
+:: Void       = Void\r
+:: Filemode   = Lees | Schrijf\r
+:: Filenaam :== String\r
+:: Filehandle\r
+\r
+//     voer monadische I/O actie uit op de wereld:\r
+//doIO         :: (IO a) *World -> (a,*World)\r
+\r
+//  IO is een monad:\r
+//instance return IO\r
+//instance >>=    IO\r
+//\r
+////   lees regel van de console:\r
+//read         :: IO String\r
+//\r
+////   schrijf regel naar de console:\r
+//write                :: String -> IO Void\r
+//\r
+////   open de file met gegeven filenaam en mode:\r
+//open         :: Filenaam Filemode -> IO (Maybe Filehandle)\r
+//\r
+////   sluit de file met gegeven filenaam:\r
+//close                :: Filehandle -> IO Bool\r
+//\r
+////   bepaal of het lezen van de file klaar is:\r
+//eof                  :: Filehandle -> IO Bool\r
+//\r
+////   lees een regel van een file:\r
+//readline     :: Filehandle -> IO (Maybe String)\r
+//\r
+////   schrijf een regel naar een file:\r
+//writeline    :: String Filehandle -> IO Bool\r
index 7f112a7..1d4b24e 100644 (file)
@@ -1,22 +1,16 @@
-module StdIOMonad
-
-import StdEnv, StdMaybe, StdMonad, StdFile
-
-:: IO a = IO (*World -> *(a, *World))
-
-read :: *World -> (IO String, *World)
-read world
-# (io, world) = stdio world
-# (line, io) = freadline io
-# (ok, world) = fclose io
-| not ok = abort "Couldn't close console"
-| otherwise = line
-
-instance return IO where
-       return x = IO (\w = (x, w))
-
-instance >>= IO where
-       >>= (IO f) g = (IO f)
-
-Start :: *World -> (IO String, *World)
-Start world = read 
+implementation module StdIOMonad\r
+\r
+//     Deze module verpakt StdFile in een monadische jas\r
+\r
+import StdFile\r
+import StdMonad\r
+//import StdOverloaded\r
+\r
+:: IO a = IO [a]       // kies een geschikte representatie voor IO\r
+:: Filemode = Lees | Schrijf\r
+:: Filenaam :== String\r
+:: Filehandle :== []   // kies een geschikte representatie voor Filehandle\r
+\r
+//instance toInt Filemode where\r
+//     toInt Lees                                              = FReadText\r
+//     toInt Schrijf                                   = FWriteText\r
diff --git a/fp2/week2/mart/StdListMonad.dcl b/fp2/week2/mart/StdListMonad.dcl
new file mode 100644 (file)
index 0000000..576ef55
--- /dev/null
@@ -0,0 +1,7 @@
+definition module StdListMonad\r
+\r
+import StdMonad\r
+\r
+instance return []\r
+instance >>=    []\r
+instance fail   []\r
diff --git a/fp2/week2/mart/StdListMonad.icl b/fp2/week2/mart/StdListMonad.icl
new file mode 100644 (file)
index 0000000..b3b3d62
--- /dev/null
@@ -0,0 +1,7 @@
+implementation module StdListMonad\r
+\r
+import StdMonad\r
+\r
+instance return        [] where return x = [x]\r
+instance >>=   [] where >>= xs f = [y \\ x <- xs, y <- f x]\r
+instance fail   [] where fail     = []\r
diff --git a/fp2/week2/mart/StdMaybeMonad.dcl b/fp2/week2/mart/StdMaybeMonad.dcl
new file mode 100644 (file)
index 0000000..e9ebec1
--- /dev/null
@@ -0,0 +1,9 @@
+definition module StdMaybeMonad\r
+\r
+import StdMonad\r
+\r
+:: Maybe a = Nothing | Just a\r
+\r
+instance return        Maybe\r
+instance >>=   Maybe\r
+instance fail   Maybe\r
diff --git a/fp2/week2/mart/StdMaybeMonad.icl b/fp2/week2/mart/StdMaybeMonad.icl
new file mode 100644 (file)
index 0000000..1c6277d
--- /dev/null
@@ -0,0 +1,10 @@
+implementation module StdMaybeMonad\r
+\r
+import StdMonad\r
+\r
+:: Maybe a = Nothing | Just a\r
+\r
+instance return        Maybe where return x       = Just x\r
+instance >>=   Maybe where >>= (Just x) f = f x\r
+                            >>= Nothing  f = Nothing\r
+instance fail   Maybe where fail           = Nothing\r
diff --git a/fp2/week2/mart/ToonFileMonad.icl b/fp2/week2/mart/ToonFileMonad.icl
new file mode 100644 (file)
index 0000000..acd62c2
--- /dev/null
@@ -0,0 +1,30 @@
+module ToonFileMonad\r
+\r
+import StdArray, StdInt, StdString     // expliciete imports van StdEnv om name-clash met StdFunc en StdIOMonad te voorkomen\r
+import StdIOMonad\r
+import StdMaybeMonad\r
+\r
+Start :: *World -> (Void,*World)\r
+Start world = doIO toon world\r
+\r
+toon :: IO Void\r
+toon = write "Voer een filenaam in: " >>= \_ ->\r
+       read                           >>= \filenaam ->\r
+       open (filenaam%(0,size filenaam-2)) Lees >>= \misschien_filehandle ->\r
+       case misschien_filehandle of\r
+           Nothing\r
+               = write ("Kon " +++ filenaam +++ " niet openen.\n") >>= \_ ->\r
+                 return Void\r
+           Just filehandle\r
+               = toon_inhoud filehandle\r
+\r
+toon_inhoud :: Filehandle -> IO Void\r
+toon_inhoud filehandle\r
+       = eof filehandle >>= \einde ->\r
+         if einde\r
+            (return Void)\r
+            (readline filehandle >>= \misschien_regel ->\r
+             case misschien_regel of\r
+                 Nothing    = return Void\r
+                 Just regel = write regel >>= \_ -> toon_inhoud filehandle\r
+            )\r
diff --git a/fp2/week2/mart/oldold/old/StdIOMonad.dcl b/fp2/week2/mart/oldold/old/StdIOMonad.dcl
new file mode 100644 (file)
index 0000000..375f077
--- /dev/null
@@ -0,0 +1,40 @@
+definition module StdIOMonad\r
+\r
+//     Deze module verpakt een aantal StdFile functies in een monadische jas\r
+\r
+import StdMonad, StdMaybeMonad\r
+\r
+:: IO a\r
+:: Void       = Void\r
+:: Filemode   = Lees | Schrijf\r
+:: Filenaam :== String\r
+:: *Filehandle\r
+\r
+//     voer monadische I/O actie uit op de wereld:\r
+//doIO         :: (IO a) *World -> *(a,*World)\r
+\r
+//  IO is een monad:\r
+//instance return IO\r
+//instance >>=    IO\r
+\r
+//     lees regel van de console:\r
+read           :: IO String\r
+\r
+/*\r
+//     schrijf regel naar de console:\r
+write          :: String -> IO Void\r
+\r
+//     open de file met gegeven filenaam en mode:\r
+open           :: Filenaam Filemode -> IO (Maybe Filehandle)\r
+\r
+//     sluit de file met gegeven filenaam:\r
+close          :: Filehandle -> IO Bool\r
+\r
+//     bepaal of het lezen van de file klaar is:\r
+eof                    :: Filehandle -> IO Bool\r
+\r
+//     lees een regel van een file:\r
+readline       :: Filehandle -> IO (Maybe String)\r
+\r
+//     schrijf een regel naar een file:\r
+writeline      :: String Filehandle -> IO Bool*/\r
diff --git a/fp2/week2/mart/oldold/old/StdIOMonad.icl b/fp2/week2/mart/oldold/old/StdIOMonad.icl
new file mode 100644 (file)
index 0000000..0338a44
--- /dev/null
@@ -0,0 +1,93 @@
+implementation module StdIOMonad\r
+\r
+//Deze module verpakt StdFile in een monadische jas\r
+\r
+import StdFile\r
+import StdMonad\r
+import StdMaybeMonad\r
+\r
+\r
+:: IO a = IO (*World Filehandle -> *(a, *World, Filehandle))\r
+:: Void       = Void\r
+:: Filemode   = Lees | Schrijf\r
+:: Filenaam :== String\r
+:: *Filehandle = None | FH *(Bool, Filemode, *File)\r
+\r
+toInt :: Filemode -> Int\r
+toInt Lees = FReadText\r
+toInt Schrijf = FWriteText\r
+\r
+Start world = read\r
+\r
+////voer monadische I/O actie uit op de wereld:\r
+//doIO :: (IO a) *World -> *(a,*World)\r
+//doIO (IO f) world = f (world, Closed)\r
+\r
+//  IO is een monad:\r
+instance return IO where\r
+       return x = IO (\w fh = (x, w, fh))\r
+//instance >>=    IO where\r
+//     (>>=) (IO f) g = IO(\w = let (a, w1) = f w in doIO (g a) w1)\r
+\r
+//lees regel van de console:\r
+read:: IO String\r
+read = IO (\w fh -> ("", w, fh))\r
+\r
+/*//schrijf regel naar de console:\r
+write:: String -> IO Void\r
+write s = IO (\w = (Void, write` s w))\r
+       where\r
+               write`:: String *World -> *World\r
+               write` s world\r
+               # (io, world) = stdio world\r
+               # io = fwrites s world\r
+               # (_, world) = fclose io\r
+               = world\r
+\r
+//open de file met gegeven filenaam en mode:\r
+open:: Filenaam Filemode -> IO (Maybe Filehandle)\r
+open s m = IO (\w = let (f1, w1) = openfh` s m w in (f1, (w1, f1)))\r
+       where\r
+               openfh`:: Filenaam Filemode *World -> (Maybe Filehandle, *World)\r
+               openfh` s m world\r
+               # (ok, file, world) = fopen s (toInt m) world\r
+               | ok = (Just (Open (m, file)), world)\r
+               | otherwise = (Nothing, world)\r
+\r
+//sluit de file met gegeven filenaam:\r
+close:: Filehandle -> IO Bool\r
+close fh = IO (\w = let (b1, w1) = close` fh w in (b1, (w1, Closed)))\r
+       where\r
+               close`:: Filehandle *World -> (Bool, *World)\r
+               close` Closed world = (False, world)\r
+               close` (Open (_, file)) world = fclose file world\r
+\r
+//bepaal of het lezen van de file klaar is:\r
+eof:: Filehandle -> IO Bool\r
+eof fh = IO (\w = let (b1, w1) = eof` fh w in (b1, (w1, Closed)))\r
+       where\r
+               eof`:: Filehandle *World -> (Bool, *World)\r
+               eof` Closed world = (world, False)\r
+               eaf`(Open (_, file)) world = fclose file\r
+\r
+//lees een regel van een file:\r
+readline:: Filehandle -> IO (Maybe String)\r
+readline fh = IO (\w = let r1 = readline` fh w in r1)\r
+       where\r
+               readline`:: Filehandle *World -> (Maybe String, (*World, Filehandle))\r
+               readline` Closed world = (world, Nothing)\r
+               readline` (Open (Schrijf, _)) world = (world, Nothing)\r
+               readline` (Open (Lees, file)) world\r
+               # (line, file) = sfreadline file\r
+               = (Just line, (world, Open (Lees, file)))\r
+\r
+//schrijf een regel naar een file:\r
+writeline:: String Filehandle -> IO Bool\r
+writeline s fh = IO (\w = let r1 = writeline` s fh w in r1)\r
+       where\r
+               writeline`:: String Filehandle *World -> (Bool, (*World, Filehandle))\r
+               writeline` line Closed world = (False, (world, Closed))\r
+               writeline` line (Open (Lees, file)) world = (False, (world, (Open (Lees, file))))\r
+               writeline` line (Open (Schrijf, file)) world\r
+               # file = fwrites line file\r
+               = (True, (world, file))*/\r
diff --git a/fp2/week2/mart/oldold/old/StdMaybeMonad.dcl b/fp2/week2/mart/oldold/old/StdMaybeMonad.dcl
new file mode 100644 (file)
index 0000000..e9ebec1
--- /dev/null
@@ -0,0 +1,9 @@
+definition module StdMaybeMonad\r
+\r
+import StdMonad\r
+\r
+:: Maybe a = Nothing | Just a\r
+\r
+instance return        Maybe\r
+instance >>=   Maybe\r
+instance fail   Maybe\r
diff --git a/fp2/week2/mart/oldold/old/StdMaybeMonad.icl b/fp2/week2/mart/oldold/old/StdMaybeMonad.icl
new file mode 100644 (file)
index 0000000..1c6277d
--- /dev/null
@@ -0,0 +1,10 @@
+implementation module StdMaybeMonad\r
+\r
+import StdMonad\r
+\r
+:: Maybe a = Nothing | Just a\r
+\r
+instance return        Maybe where return x       = Just x\r
+instance >>=   Maybe where >>= (Just x) f = f x\r
+                            >>= Nothing  f = Nothing\r
+instance fail   Maybe where fail           = Nothing\r
diff --git a/fp2/week2/mart/oldold/old/StdMonad.dcl b/fp2/week2/mart/oldold/old/StdMonad.dcl
new file mode 100644 (file)
index 0000000..cd1c654
--- /dev/null
@@ -0,0 +1,8 @@
+definition module StdMonad\r
+\r
+class return        c :: a -> c a\r
+class (>>=) infix 0    c :: (c a) (a -> c b) -> c b\r
+class fail          c :: c a\r
+\r
+class Monad            c | return, >>= c\r
+class MonadFail            c | Monad, fail c\r
diff --git a/fp2/week2/mart/oldold/old/StdMonad.icl b/fp2/week2/mart/oldold/old/StdMonad.icl
new file mode 100644 (file)
index 0000000..db193ab
--- /dev/null
@@ -0,0 +1 @@
+implementation module StdMonad\r