       (read (show string)))"""
   """(test "Hello")""", "Hello"
 
+  'multiple instances'
+  """Show (class [a]
+  show (fn [x] (: (Fn a String))))
+
+  show-string (instance (Show String)
+    show (fn [x] x))
+
+  show-bool (instance (Show Bool)
+    show (fn [x]
+      (match x
+        True "True"
+        False "False")))"""
+  "(show False)", "False"
+
 ]
 
 testNamed = (givenName) ->

        ctx.declare name
    #log "exiting pattern early", pattern, "for", ctx.shouldDefer()
    return {}

  # Properly bind types according to the pattern
  if pattern.tea

        requiredElems++

    if hasSplat and requiredElems is 0
      return malformed form, 'Matching with splat requires at least one element name'

    compiledArgs = (for elem, i in elems
      [lhs, rhs] =
