javascript/javascript-registry.ss
#lang typed-scheme

(require/opaque-type Javascript javascript? "javascript.ss")
(require/typed scheme/string [string-join ((Listof String) String -> String)])
(require/typed "javascript.ss" [javascript->string (Javascript -> String)])

(: registry (Listof Javascript))
(define registry null)

(: registry-add! (Javascript -> Void))
(define (registry-add! s)
  (set! registry (cons s registry)))

(: registry->string (-> String))
(define (registry->string)
  (string-join (map javascript->string (reverse registry)) "\n"))

(: registry-clear! (-> Void))
(define (registry-clear!)
  (set! registry null))

(provide
 registry-add!
 registry->string
 registry-clear!)