                          "parse"
                          "decl")
     (switch-to-buffer "*shm-scratch-test*")))
+
+(defun shm/type-of-node ()
+  (interactive)
+  (let ((current (shm-current-node)))
+    (cond
+     ((or (string= (shm-node-type-name current) "Exp")
+          (string= (shm-node-type-name current) "Decl")
+          (string= (shm-node-type-name current) "Pat")
+          (string= (shm-node-type-name current) "QOp"))
+      (let ((type-info (shm-node-type-info current)))
+        (if type-info
+            (shm-present-type-info current type-info)
+          (error "Unable to get type information for that node."))))
+     ((and (string= (shm-node-type-name current) "Name")
+           (let ((parent-name (shm-node-type-name (cdr (shm-node-parent (shm-current-node-pair))))))
+             (or (string= parent-name "Match")
+                 (string= parent-name "Decl"))))
+      (let* ((node (cdr (shm-node-parent (shm-current-node-pair))))
+             (type-info (shm-node-type-info node)))
+        (if type-info
+            (shm-present-type-info node type-info)
+          (error "Unable to get type information for that node (tried the whole decl, too)."))))
+     (t (error "Not an expression, operator, pattern binding or declaration.")))))
 
 (defun shm/describe-node (&optional node)
   "Present a description of the current node in the minibuffer.

    ;; Splitting, slurping, barfing, etc.
    (define-key map (kbd "C-+") 'shm/add-operand)
    (define-key map (kbd "M-r") 'shm/raise)
    map)
  "Structural editing operations keymap. Any key bindings in this
  map are intended to be only structural operations which operate

(defun shm/kill-region (beg end)
  "Kill the region, and save it in the clipboard."
  (interactive "r")
  (shm-kill-region nil beg end nil))

(defun shm/kill-line ()
  "Kill everything possible to kill after point before the end of
