Use two interfaces: A and AFactory
A is the interface.
AFactory implements all the factory methods as well as behavior relevant to the Class rather than any particular object.
Then you have
(define-syntax (val stx) | |
(syntax-case stx () | |
[(_ id v) | |
#`(define-syntax id | |
(make-set!-transformer | |
(lambda (stx) | |
(syntax-case stx (set!) | |
[(set! id new-v) #'(error 'id "~a is not mutable" (symbol->string 'id))] | |
[id (identifier? #'id) #'v]))))])) |
#lang typed/racket | |
(: mergesort : (All (X) ([Listof X] [X X -> Boolean] -> [Listof X]))) | |
(define (mergesort ls <=) | |
(: mergesort/length : (All (X) ([Listof X] Integer -> [Listof X]))) | |
(define (mergesort/length ls n) | |
(let* ([n/2 (exact-floor (/ n 2))]) | |
(cond [(= n 0) ls] | |
[(= n 1) ls] | |
[else (merge (mergesort/length (take ls n/2) n/2) |
#lang racket | |
(require parser-tools/lex) | |
(require parser-tools/yacc) | |
(require (prefix-in : parser-tools/lex-sre)) | |
(provide parse-program current-source-name) | |
(define current-source-name (make-parameter #f)) |
#include <sys/param.h> | |
#include <sys/lock.h> | |
#include <sys/mutex.h> | |
#include <sys/kernel.h> | |
#include <sys/module.h> | |
#include <sys/mman.h> | |
#include <sys/namei.h> | |
#include <sys/ucred.h> | |
#include <sys/queue.h> | |
#include <sys/vnode.h> |
#lang racket | |
(require ffi/unsafe | |
ffi/unsafe/custodian) | |
(define n 0) | |
(define (foo) | |
(define 100bytes (malloc 100 'raw)) | |
(define uid n) | |
(set! n (add1 n)) |
root@shillbsd:/home/danking # cat out | |
Session: fffffe009e640ba0 Message: Initializing new session | |
Session: fffffe009e640ba0 Capability: fffffe009e747d20 | |
Session: fffffe009e640ba0 Capability: fffffe009e70b450 | |
+chdir +chroot +create-dir { fffffe009e70b450 } +lookup { fffffe009e70b450 } +addlink +read +stat | |
Session: fffffe009e640ba0 Message: Granted capabilities on fffffe009e4357e0: fffffe009e70b450 | |
Session: fffffe009e640ba0 Message: Granted capabilities on fffffe009e4357e0: fffffe009e70b450 | |
Session: fffffe009e640ba0 Message: Granted capabilities on fffffe00041319d8: fffffe009e70b450 |
#lang shill/cap | |
require shill/contracts | |
shill/io; | |
provide [find : forall [X:+path,+lookup,+contents] . [f: X] | |
[filter: [_: X] -> boolean?] | |
[cmd: [_: X] -> any] | |
-> | |
any ]; |
#lang shill/ambient | |
require shill/native; | |
require "syscall-test.cap"; | |
val wallet = create-wallet(); | |
populate-native-wallet(wallet | |
,open-dir("/") | |
,"/home/danking/tests/individual-system-call-tests" | |
,"/libexec:/lib:/usr/lib" |
#lang racket | |
(require redex) | |
(require redex/tut-subst) | |
(define-language L | |
(e (e e) | |
x | |
v) | |
(v (lambda (x) e)) |