         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
 

  map labelConflict, fail.conflicts

labelConflict = (conflict) ->
  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
    labelConflicts _fst ctx.substitution.fails
    ctx.substitution.fails

labelConflicts = (fail) ->
