   'functional deps'
   """
     Collection (class [ce e]
-      (# (| ce: e))
       first (fn [in]
         (: (Fn ce e))))
 

  deferred: ctx.deferredBindings()

highlightType = (type) ->
  typeAst = astize tokenize printType type
  syntaxType typeAst
  collapse toHtml typeAst

subToObject = (sub) ->
  ob = {}

    if t1.types.length isnt t2.types.length
      unifyFail t1, t2
    else if _notEmpty t1.types
      # log "matching ", (printType t1.types[0]), (printType t2.types[0])
      s1 = matchType t1.types[0], t2.types[0]
      # log "after matching", s1
      # I will imply functional dependency of the form A a b c | a -> b c
      s2 = mostGeneralUnifier (new Types (substituteList s1, t1.types[1...])), (new Types t2.types[1...])
      s3 = mergeSubs s1, s2
      s3 or
        unifyFail t1, t2
