(define spec-form-kind
  (fn
    (form)
    (let
      ((head (symbol-name (first form))))
      (cond
        (= head "defcomp")
        "component"
        (= head "defisland")
        "island"
        (= head "defmacro")
        "macro"
        (= head "define")
        (let
          ((body (last form)))
          (if
            (and
              (list? body)
              (> (len body) 0)
              (= (type-of (first body)) "symbol")
              (or
                (= (symbol-name (first body)) "fn")
                (= (symbol-name (first body)) "lambda")))
            "function"
            "constant"))
        :else "unknown"))))
