     # TODO: I need to unify the type of each method with their declared types
     #       from the type class
     # ctx.bindTypeVariables keysOfMap findFree instanceType.type
+    # TODO: I need to run them as explicitly typed and not only I need to add
+    #       the binded variables I also have to add their constraints
     methodsDeclarations = definitionList ctx, pairs wheres
     declarations = ctx.currentDeclarations()
     ctx.closeScope()
 
     methods = map (({rhs}) -> rhs), methodsDeclarations
-
-    # TODO: this is hard,
-    # there are some special cases like:
-    # class Show a where
-    #   show :: a -> String
-    #   ho :: a -> String
+    log methods
 
     className = instanceType.className
     # TODO: defer for class declaration if not defined

    callTyping ctx, call
    assignCompile ctx, call, (jsBinary "===", compiledA, compiledB)



# Creates the condition and body of a branch inside match macro

    malformed expression, 'Class constraint expected'

typeConstraintsCompile = (expressions) ->
  filter ((t) -> t instanceof ClassContraint),
    (map typeConstraintCompile, expressions)

typeTupleCompile = (form) ->
  form.label = 'operator'
