 
   'classes'
   """Show (class [a]
-       show (fn [x] (: (Fn a String))))
+      show (fn [x] (: (Fn a String))))
 
     show-string (instance (Show String)
-       show (fn [x] x))
+      show (fn [x] x))
 
     aliased-show (fn [something]
-       (show something))
+      (show something))
 
     showed-simply (show "Hello")
     showed-via-alias (aliased-show "Hello")"""
   "(= showed-simply showed-via-alias)", yes
+
+  'multiple methods'
+  """Util (class [a]
+      show (fn [x] (: (Fn a String)))
+      read (fn [x] (: (Fn String a))))
+
+    util-string (instance (Util String)
+       show (fn [x] x)
+       read (fn [x] x))
+
+    test (fn [string]
+      (: (Fn String String))
+      (read (show string)))"""
+  """(test "Hello")""", "Hello"
 
 ]
 

  [terms..., expression] = _terms ast
  ctx = new Context
  compiledDefinitions = compileDefinitionList ctx, terms
  compiledExpression = translateToJs translateIr ctx, topLevelExpression ctx, expression
  types: ctx._scope()
  subs: filterMap ((name) -> name is 'could not unify'), ctx.substitution
  ast: ast

token_ = (string) ->
  (tokenize string)[0]

translateIr = (ctx, irAst) ->
  walkIr irAst, (ast) ->
    if ast.ir
      ast.ir ctx, ast
    else
