wisp
 
(Arne Babenhauserheide)
2013-09-13: convert the reader from scheme to wisp

convert the reader from scheme to wisp

diff --git a/wisp-reader.w b/wisp-reader.w
--- a/wisp-reader.w
+++ b/wisp-reader.w
@@ -9,59 +9,63 @@
 
 
 ; adapted from spec.scm: https://gitorious.org/nacre/guile-sweet/source/ae306867e371cb4b56e00bb60a50d9a0b8353109:sweet/spec.scm
-(define-module (language wisp spec)
-  #:use-module (wisp)  ; I’d like to specify 
-  #:use-module (system base compile)
-  #:use-module (system base language)
-  #:export (wisp))
+define-module : language wisp spec
+  . #:use-module : wisp
+  . #:use-module : system base compile
+  . #:use-module : system base language
+  . #:export : wisp
 
 ;;;
 ;;; Language definition
 ;;;
 
-(define (compile-scheme x e opts) (values x e e))
+define : compile-scheme x e opts
+       values x e e
 
-(define (decompile-scheme x e opts) (values x e))
+define : decompile-scheme x e opts
+       values x e
 
-(define wisp-pending-port (make-object-property))
+define wisp-pending-port : make-object-property
 
 ; Code thanks to Mark Weaver
-(define (read-one-wisp-sexp port env)
-  (define (read-wisp-chunk)
-    (let ((s (wisp2lisp (wisp-chunkreader port))))
-      (set! (wisp-pending-port port)
-            (open-input-string s))
-      (try-pending)))
-  (define (try-pending)
-    (let ((pending-port (wisp-pending-port port)))
-      (if pending-port
-          (let ((x (read pending-port)))
-            (if (eof-object? x)
-                (read-wisp-chunk)
-                x))
-          (read-wisp-chunk))))
-  (try-pending))
+define : read-one-wisp-sexp port env
+  define : read-wisp-chunk
+    let : : s : wisp2lisp : wisp-chunkreader port
+       set! : wisp-pending-port port
+              open-input-string s
+       try-pending
+  define : try-pending
+    let : : pending-port : wisp-pending-port port
+      if pending-port
+          let : : x : read pending-port
+             if : eof-object? x
+                read-wisp-chunk
+                . x
+          read-wisp-chunk
+  try-pending
 
-(define-language wisp
-  #:title "Wisp Scheme Syntax THIS IS EXPERIMENTAL, USE AT YOUR OWN RISK"
-  #:reader read-one-wisp-sexp
-  #:compilers `((scheme . ,compile-scheme))
-  #:decompilers `((scheme . ,decompile-scheme))
-  #:evaluator (lambda (x module) (primitive-eval x))
-  #:printer write
-  #:make-default-environment
-  (lambda ()
+define-language wisp
+  . #:title "Wisp Scheme Syntax THIS IS EXPERIMENTAL, USE AT YOUR OWN RISK"
+  . #:reader read-one-wisp-sexp
+  . #:compilers `((scheme . ,compile-scheme)) ; I do not touch quasiquotes yet.
+  . #:decompilers `((scheme . ,decompile-scheme))
+  . #:evaluator 
+        lambda : x module
+               primitive-eval x
+  . #:printer write
+  . #:make-default-environment
+  lambda :
     ;; Ideally we'd duplicate the whole module hierarchy so that `set!',
     ;; `fluid-set!', etc. don't have any effect in the current environment.
-    (let ((m (make-fresh-user-module)))
+    let : : m : make-fresh-user-module
       ;; Provide a separate `current-reader' fluid so that
       ;; compile-time changes to `current-reader' are
       ;; limited to the current compilation unit.
-      (module-define! m 'current-reader (make-fluid))
+      module-define! m 'current-reader : make-fluid
       ;; Default to `simple-format', as is the case until
       ;; (ice-9 format) is loaded. This allows
       ;; compile-time warnings to be emitted when using
       ;; unsupported options.
-      (module-set! m 'format simple-format)
-      m)))
+      module-set! m 'format simple-format
+      . m