   if isAtom op
     name = op.symbol
     compiledArgs = typesCompile ctx, args
-    withOrigin (if name is 'Fn'
+    if name is 'Fn'
       (labelOperator op)
-      typeFn compiledArgs...
+      mapOriginOnFunction (typeFn compiledArgs...), call
     else
       arity = args.length
       operatorType = typeNameCompile ctx, op, (kindFn arity)
-      applyKindFn operatorType, compiledArgs...), call
+      withOrigin (applyKindFn operatorType, compiledArgs...), call
   else
     malformed ctx, op, 'Expected a type constructor instead'
 


callInferSingle = (ctx, originalOperator, operatorTea, argTea) ->
  returnType = withOrigin (ctx.freshTypeVariable star), originalOperator
  callType = withOrigin (typeFn argTea.type, returnType), originalOperator
  unify ctx, operatorTea.type, callType
  new Constrained (join operatorTea.constraints, argTea.constraints), returnType

callZeroInfer = (ctx, originalOperator, operatorTea) ->
  returnType = withOrigin (ctx.freshTypeVariable star), originalOperator
  callType = withOrigin (typeFn returnType), originalOperator
  unify ctx, operatorTea.type, callType
  new Constrained operatorTea.constraints, returnType


  if isFunctionType type
    withOrigin type, expression
    withOrigin type.op, expression
    withOrigin type.op.op, expression if type.op.op # It's cloned
    mapOriginOnFunction type.arg, expression
  type

