[Haskell-cafe] Re: coherence when overlapping?

Martin Sulzmann sulzmann at comp.nus.edu.sg
Sun Apr 16 22:53:07 EDT 2006

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

  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"


  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 =

As far as I know, the term "coherence" was coined by

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"


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

More information about the Haskell-Cafe mailing list