provide a nicer binary type interface

This commit is contained in:
Alex Shinn 2017-03-25 17:46:30 +09:00
parent ae76cc7149
commit d482daa106
3 changed files with 8 additions and 7 deletions

View file

@ -31,7 +31,7 @@
(b ...) (f ...))
(defrec ((block: . fields) . rest) n m p r w
(b ...
(field read-tmp (type read: 'args) write-tmp (type write: 'args) getter))
(field read-tmp (type read: args) write-tmp (type write: args) getter))
(f ...
(field getter . s))))
((defrec ((block: (field . x)) . rest) n m p r w b f)

View file

@ -7,7 +7,7 @@
((defrec () n m p r w
((field-tmp field-read field-read-expr field-write field-write-expr field-get) ...)
((field getter . s) ...)
((def setter val) ...))
(def-setter ...))
(begin
(define-record-type n (m field ...) p
(field getter . s) ...)
@ -20,7 +20,7 @@
(let ((field-write field-write-expr) ...)
(lambda (x out)
(field-write (field-get x) out) ...)))
(def setter val) ...)
def-setter ...)
;; workaround for impls which strip hygiene from top-level defs
;; for some reason, works in chicken but not across libraries
;;
@ -55,12 +55,12 @@
(b ...) (f ...) (s ...))
(defrec ((block: . fields) . rest) n m p r w
(b ...
(field read-tmp (type read: 'args) write-tmp (type write: 'args) getter))
(field read-tmp (type read: args) write-tmp (type write: args) getter))
(f ...
(field getter tmp-setter))
(s ...
(define setter
(let ((pred? (type pred: 'args)))
(let ((pred? (type pred: args)))
(lambda (x val)
(if (not (pred? val))
(error "invalid val for" 'field val))
@ -69,7 +69,7 @@
(b ...) (f ...) s)
(defrec ((block: . fields) . rest) n m p r w
(b ...
(field read-tmp (type read: 'args) write-tmp (type write: 'args) getter))
(field read-tmp (type read: args) write-tmp (type write: args) getter))
(f ...
(field getter))
s))

View file

@ -16,7 +16,8 @@
;; auxiliary syntax
make: pred: read: write: block:
;; indirect exports
define-binary-type defrec define-auxiliary-syntax)
define-binary-type defrec define-auxiliary-syntax
syntax-let-optionals*)
(include "binary-types.scm")
(cond-expand
(chicken