Support writing needed extension types

Oh, there's no `boolean?` in core.  I suppose you could do `(or (true? critical) (false? critical))`