   map labelConflict, fail.conflicts
 
 labelConflict = (conflict) ->
-  conflict.error = yes
+  if conflict.TypeVariable and conflict.ref.val
+    labelConflict conflict.ref.val
+  else
+    conflict.error = yes
 
 lookupJs = (moduleName) ->
   js = (lookupCompiledModule moduleName)?.js

checkTypes = (ctx) ->
  # failed = mapToArray filterMap ((name) -> name is 'could not unify'), ctx.substitution
  if isFailed ctx.substitution
    map labelConflicts, ctx.substitution.fails
    ctx.substitution.fails

labelConflicts = (fail) ->

        op.op.name is 'Fn' and arg.op.name is 'Fn'
      op: op.op
      args: join op.args, arg.args
      error: type.error or arg.error
    else if op.args
      op: op.op
      args: join op.args, [arg]
      error: type.error or op.error
    else
      op: op
      args: [arg]
      error: type.error
  else
    type

