=== Haskell unification-fd package AUTHORS/THANKS file ===

The unification-fd package was written by wren gayle romano and is
released under the terms in the LICENSE file.


=== Thanks ===

Christopher Anand --- for partially funding this work at McMaster
    University during the summer of 2011.

Nathaniel W. Filardo --- for helping to figure out the intricacies
    of unification in Dyna2 (though this code is at best loosely
    based on that work).

Edward Kmett --- for pointing out the weighted extension to path
    compression (popular in the union--find literature), and for
    suggsting the switch to having variables be of kind * rather
    than *->*

Roman Cheplyaka --- for suggesting the switching of type parameter
    order on UTerm so that it actually is the free monad. And
    for providing the freshenAll implementation.

Graham Rogers --- for suggesting the addition of Functor, Foldable,
    and Traversable instances for UnificationFailure.

=== Related Work ===

The two-level types approach was adapted from Tim Sheard[1]. The
initial (simple yet naive) implementation of unification was based
on Sheard's presentation of Cardelli's[2] algorithm in Modula-2.
Efficient backtracking search via the logict library is described
by Kiselyov et al.[3] The idea of functional pointers were independently
discovered by Dijkstra et al.[4] after their apperance in Dyna2.


[1] Tim Sheard (2001) /Generic Unification via Two-Level Types and/
        /Parameterized Modules/, Functional Pearl, ICFP.

[2] Luca Cardelli (1987) /Basic polymorphic typechecking/. Science
        of Computer Programming, 8(2):147--172.

[3] Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, and Amr
        Sabry (2005) /Backtracking, Interleaving, and Terminating/
        /Monad Transformers/, ICFP.

[4] Atze Dijkstra, Arie Middelkoop, S. Doaitse Swierstra (2008)
        /Efficient Functional Unification and Substitution/, Technical
        Report UU-CS-2008-027, Utrecht University.