     for [p, e] in underscore.zip(pattern, node)
       matchNode(p, e, match)
 
-  # TODO: ok if node instanceof pattern
+  else if node instanceof pattern
+    return yes
+
   # TODO: `Several` for mapping pattern matching over array
 
   else

# Pattern matching utilities
matchNode = (pattern, node, match) ->
  if pattern instanceof MatchCapture
      match[pattern.name] = node
      matchNode(pattern.subpattern, node, match) if pattern.subpattern?

  else if pattern instanceof Base
    throw "match failed" unless node instanceof pattern.constructor

    # this is just Palantir specific
    prelude.push @makeCode '/// <reference path="../../libraries/libraries.d.ts" />\n\n'

    # AMD module define
    for node, node_i in @expressions
      node.match [
        new Call(mkVanillaID("define"), [new Value(new Arr(M("mLabels"))),
