> > instance Show WeekDay where > (empty) You see, an empty instance like that may serve various purposes. In type-level programming, for example, they (roughly) correspond to facts in logic programming. However, in the case at hand, this is what happens: the doc for class Show reads thus:
"Minimal complete definition: showsPrec or show." This (especially the word "or") means two things: (i) the class provides default definitions for its functions; (ii) the default definition for showsPrec (resp. show) is itself defined in terms of show (resp. showsPrec). The problem is, when you declare an empty instance, all functions (if any) assume their default definitions. Therefore, when you call show/showsPrec (even indirectly) you end up in an endless loop because of (ii). I agree with you that it'd be best if this sort of thing were detected at compile time, but it ultimately boils down to automatically detecting non-terminating programs... By the way, I haven't heard of a language that tackles the same problem differently. Cheers, Jorge. > > Then he complained about getting *** Exception: stack overflow when he > tried to invoke some function on that type. > > After checking the Haskell98 grammar I found out that this is allowed > syntactically and probably semantically too. Is there any reason to do > that? > > > Now I'm wondering: Shouldn't a class be an warranty of a well defined > interface? Thus forcing the user to define the show function or showPrec? > Am > I missing any point? > > My best regards, > Hugo > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > Jorge M. Pelizzoni ICMC - Universidade de São Paulo _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell