]> git.vouivredigital.com Git - vouivre.git/commitdiff
Declare the type at macro expansion time
authoradmin <admin@vouivredigital.com>
Fri, 22 Sep 2023 08:07:20 +0000 (17:07 +0900)
committeradmin <admin@vouivredigital.com>
Fri, 22 Sep 2023 08:07:20 +0000 (17:07 +0900)
curry.scm

index 33fb629044ee95e177bdde36fdda193fb89be0ec..25b51aa4edc6dcd605d09de1b1d0c474bbe68309 100644 (file)
--- a/curry.scm
+++ b/curry.scm
@@ -12,7 +12,8 @@
    ;(vdc:primitive-eval . primitive-eval)
    )
   #:export
-  (equal-types?
+  (curried-untyped-define
+   equal-types?
    expand
    parse
    symtab
   (and (every symbol? lst)
        (equal? lst (delete-duplicates lst))))
 
-(define (sym-set! bindings name value)
-  (let ((symtab bindings))
-    (assoc-set! symtab name value)))
+(define (sym-set! symtab name value)
+  (assoc-set! symtab name value))
+
+(define (sym-set symtab sym value)
+  (sym-set! (alist-copy symtab) sym value))
 
 (define (sym-ref bindings name)
   (assoc-ref bindings name))
         x))
    node))
 
-(define (sym-set symtab sym value)
-  (sym-set! (alist-copy symtab) sym value))
-
 (define (expand symtab expr)
   (match expr
     (('quote x)
      (let ((t e (expand symtab body)))
        (if (not t)
           (type-error 5 "in body of" `(definec ,name ,body))
-          (begin
-            (∷% name t)
-            (values
-             #f
-             `(define ,name ,e))))))
+          (values
+           #f
+           `(begin
+              ((@@ (vdc curry) ∷%)
+               ',name
+               ((@ (vdc curry) parse)
+                ',(bare-type t)))
+              (define ,name ,e))))))
     ((f)
      (let ((t e (expand symtab f)))
        (values