 
 unify = (ctx, t1, t2) ->
   throw new Error "invalid args to unify" unless ctx instanceof Context and t1 and t2
-  if (includesJsType t1) or (includesJsType t2)
-    return
+  # TODO: need to taint the other type
+  # if (includesJsType t1) or (includesJsType t2)
+  #   return
   sub = ctx.substitution
   ctx.extendSubstitution mostGeneralUnifier (substitute sub, t1), (substitute sub, t2)
 

        # throw new Error "type name #{atom.symbol} was not defined" unless kind
        malformed ctx, atom, "This type name has not been defined"
        kindOfType = star
      atomicType atom.symbol, kindOfType
    else
      expanded
  finalKind = kind type

  if isAtom op
    name = op.symbol
    compiledArgs = typesCompile ctx, args
    markOrigin (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'

