=== Haskell unification-fd package AUTHORS/THANKS file ===
The unification-fd package was written by wren ng thornton 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.
=== 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.