
Coherence may also arise because of an ambiguous type. Here's the classic example. class Read a where read :: String -> a class Show a where show :: a -> String f s = show (read s) f has type String->String, therefore we can pick some arbitrary Read/Show classes. If you want to know more about coherence/ambiguity in the Haskell context. Check out @TechReport{jones:coherence, author = "M. P. Jones", title = "Coherence for qualified types", institution = "Yale University, Department of Computer Science", year = 1993, month = "September", type = "Research Report", number = "YALEU/DCS/RR-989" } and @Article{overloading-journal, author = {P.~J.~Stuckey and M.~Sulzmann }, title = {A Theory of Overloading}, journal = {ACM Transactions on Programming Languages and Systems (TOPLAS)}, publisher = "ACM Press", year = "2005", pages = "1-54", volume = 27, number = 6, preprint = {http://www.comp.nus.edu.sg/~sulzmann/chr/download/theory-journal.ps.gz}} As far as I know, the term "coherence" was coined by @article{breazu-tannen-etal:inhertiance-coercion, author = "V. Breazu{-}Tannen and T. Coquand and C. Gunter and A. Scedrov", title = "Inheritance as Implicit Coercion", journal = "Information and Computation", volume = 93, number = 1, month = jul, year = 1991, pages = "172--221" } Martin william kim writes:
Thank you Martin.
Coherence (roughly) means that the program's semantics is independent of the program's typing.
In case of your example below, I could type the program either use the first or the second instance (assuming g has type Int->Int). That's clearly bound.
If g has type Int->Int, it is not hard to say the first instance should apply. But how about g having a polymorphic type? In this case it seems to me choosing the second instance is an acceptable choice as that is the only applicable one at the moment. What is the definition of a "coherent" behaviour here? Or is there one?
Non-overlapping instances are necessary but not sufficient to obtain coherence. We also need that types/programs are unambiguous.
Do you therefore imply that coherence is not defined without the non-overlapping assumption?
--william
_________________________________________________________________ Get MSN Hotmail alerts on your mobile. http://mobile.msn.com/ac.aspx?cid=uuhp_hotmail