 
 # Either a type variable or type constructor of some kind
 atomicType = (name, kind) ->
-  if /^[A-Z]/.test name
+  if (isNotCapital symbol: name)
+    new TypeVariable name, kind
+  else
     new TypeConstr name, kind
-  else
-    new TypeVariable name, kind
 
 tupleType = (arity) ->
   new TypeConstr "[#{arity}]", kindFn arity

  type =
    if expanded is atom.symbol
      kindOfType =
        if isCapital atom
          ctx.kindOfTypeName atom.symbol
        else
          expectedKind or star
      if kindOfType instanceof TempKind
        kindOfType = expectedKind
      if not kindOfType

  /[^\\]:$/.test atom.symbol

isCapital = (atom) ->
  /^[A-Z]/.test atom.symbol

isNotCapital = (atom) ->
  /^[a-z]/.test atom.symbol

isName = (expression) ->
  throw new Error "Nothing passed to isName" unless expression
