(define-module (lang elisp primitives features) #:use-module (lang elisp internals fset) #:use-module (lang elisp internals load) #:use-module (lang elisp internals null) #:use-module (ice-9 optargs)) (define-public features '()) (fset 'provide (lambda (feature) (or (memq feature features) (set! features (cons feature features))))) (fset 'featurep (lambda (feature) (->nil (memq feature features)))) (fset 'require (lambda* (feature #:optional file-name noerror) (or (memq feature features) (load (or file-name (symbol->string feature)) noerror #f #f #t))))