Skip to content
  • Simon Peyton Jones's avatar
    Major refactoring of the type inference engine · 27310213
    Simon Peyton Jones authored
    This patch embodies many, many changes to the contraint solver, which
    make it simpler, more robust, and more beautiful.  But it has taken
    me ages to get right. The forcing issue was some obscure programs
    involving recursive dictionaries, but these eventually led to a
    massive refactoring sweep.
    
    Main changes are:
     * No more "frozen errors" in the monad.  Instead "insoluble
       constraints" are now part of the WantedConstraints type.
    
     * The WantedConstraint type is a product of bags, instead of (as
       before) a bag of sums.  This eliminates a good deal of tagging and
       untagging.
    
     * This same WantedConstraints data type is used
         - As the way that constraints are gathered
         - As a field of an implication constraint
         - As both argument and result of solveWanted
         - As the argument to reportUnsolved
    
     * We do not generate any evidence for Derived constraints. They are
       purely there to allow "impovement" by unifying unification
       variables.
    
     * I...
    27310213