[Haskell-cafe] Optimization with Strings ?

Holger Siegel holgersiegel74 at yahoo.de
Thu Dec 3 10:34:09 EST 2009


Am Donnerstag, den 03.12.2009, 16:23 +0100 schrieb Emmanuel CHANTREAU:
> Le Thu, 3 Dec 2009 13:20:31 +0100,
> David Virebayre <dav.vire+haskell at gmail.com> a écrit :
> 
> > It doesn't work this way : Strings are just lists of Chars. Comparison
> > is made recursively, Char by Char. You can have a look at the source
> > to make sure :
> > 
> > instance (Eq a) => Eq [a] where
> >     []     == []     = True
> >     (x:xs) == (y:ys) = x == y && xs == ys
> >     _xs    == _ys    = False
> 
> Hello
> 
> Thank you David and Bulat for your answers.
> 
> I don't see the proof you see. Because GHC could store two sames
> objects juste once and by the definition of == on lists it could deduce
> that "forall x; List x => x==x". GHC have all informations to do this
> optimization job, because haskell functions definitions are mathematics
> definitions.

This does not always hold, because the equivalence known from
mathematics differs from Haskell's strict equality when it comes to
infinite or undefined values. Consider

  let x = repeat () in x == x

and

  let x = error "oops" in x == x

In both cases your optimized program would return True, although the
value is undefined (bottom).




More information about the Haskell-Cafe mailing list