I want to make sure some Scheme code using (oop goops) can be used from elisp. The method I'm defining is something like this (overly simplified): ;; TODO: Define a instead of working with raw integers? (define-method (send-message! (msg ) (data ) (remote )) [ write data to msg ] [ call mach_msg appropriately ]) I tested whether elisp's #nil is considered a , apparently not: (use-modules (oop goops)) (is-a? '() ) ;; #t (is-a? '(a . ()) ) ;; #t (is-a? #nil ) ;; #f, expected #t (is-a? '(a . #nil) ) ;; #t (class-of '()) ;; (class-of '(a . ())) ;; (class-of #nil) ;; , expected (a subclass of) (class-of '(a . #nil)) ;; #nil is both a boolean, and an end-of-list object. As such, it should be both and (and ). But currently it is only . My untested suggestion: Define a class , inheriting from and . Define class_elisp_nil appropriately in libguile/goops.c and (oop goops). In scm_class_of, adjust case scm_tc3_imm24: if (SCM_CHARP (x)) return class_char; else if (scm_is_bool (x)) return class_boolean; else if (scm_is_null (x)) return class_null; else return class_unknown; appropriately. Greetings, Maxime