     if not to
       from
     else
-      new TypeApp (new TypeApp arrowType, from), to
+      new TypeApp (new TypeApp (cloneType arrowType), from), to
   else
     properTypeFn from, (properTypeFn to, args...)
 

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


  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

