       (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) ->

irDefinition = (type, expression) ->
  {ir: irDefinitionTranslate, type, expression}

irDefinitionTranslate = (ctx, {type, expression}) ->
  finalType = substitute ctx.substitution, type
  # deferConstraints ctx, ctx.boundTypeVariables(), (findFree finalType)

jsFunctionTranslate = ({name, params, body}) ->
  "function #{name or ''}(#{listOf params}){#{blockOfLines body}}"


jsMalformed = (message) ->
  {js: jsMalformedTranslate, message: message}

jsMalformedTranslate = ({message}) ->
  message

jsNew = (classFun, args) ->
  {js: jsNewTranslate, classFun, args}
