From: sewardj Date: Wed, 1 Dec 1999 10:22:54 +0000 (+0000) Subject: [project @ 1999-12-01 10:22:53 by sewardj] X-Git-Tag: Approximately_9120_patches~5463 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=84ece4ab29a5e6fa9c3a3826dce1520785c4ceec;p=ghc-hetmet.git [project @ 1999-12-01 10:22:53 by sewardj] Fix bug in 'deriving Enum' reported by Ralf Hinze: data T = A | B deriving Enum failed, requiring instance Ord T, because code generated for enumFromThen required Ord. We now derive just fromEnum and toEnum, and let the Report's defaults do the rest. --- diff --git a/ghc/interpreter/derive.c b/ghc/interpreter/derive.c index f3ea7cf..414c7fb 100644 --- a/ghc/interpreter/derive.c +++ b/ghc/interpreter/derive.c @@ -9,8 +9,8 @@ * included in the distribution. * * $RCSfile: derive.c,v $ - * $Revision: 1.9 $ - * $Date: 1999/11/12 17:32:38 $ + * $Revision: 1.10 $ + * $Date: 1999/12/01 10:22:53 $ * ------------------------------------------------------------------------*/ #include "prelude.h" @@ -255,17 +255,7 @@ Tycon t; { implementTagToCon(t); return cons(mkBind("toEnum", mkVarAlts(l,tycon(t).tagToCon)), cons(mkBind("fromEnum", mkVarAlts(l,tycon(t).conToTag)), - cons(mkBind("enumFrom", singleton(pair(singleton(x), - pair(mkInt(l), - ap2(nameFromTo,x,last))))), - /* default instance of enumFromTo is good */ - cons(mkBind("enumFromThen",singleton(pair(doubleton(x,y), - pair(mkInt(l), - ap3(nameFromThenTo,x,y, - ap(COND,triple(ap2(nameLe,x,y), - last,first))))))), - /* default instance of enumFromThenTo is good */ - NIL)))); + NIL)); } diff --git a/ghc/interpreter/lib/Prelude.hs b/ghc/interpreter/lib/Prelude.hs index e0bc1d1..8a1e04d 100644 --- a/ghc/interpreter/lib/Prelude.hs +++ b/ghc/interpreter/lib/Prelude.hs @@ -370,7 +370,9 @@ class Enum a where -- Minimal complete definition: toEnum, fromEnum succ = toEnum . (1+) . fromEnum pred = toEnum . subtract 1 . fromEnum + enumFrom x = map toEnum [ fromEnum x .. ] enumFromTo x y = map toEnum [ fromEnum x .. fromEnum y ] + enumFromThen x y = map toEnum [ fromEnum x, fromEnum y .. ] enumFromThenTo x y z = map toEnum [ fromEnum x, fromEnum y .. fromEnum z ] -- Read and Show classes ------------------------------------------------------ diff --git a/ghc/lib/hugs/Prelude.hs b/ghc/lib/hugs/Prelude.hs index e0bc1d1..8a1e04d 100644 --- a/ghc/lib/hugs/Prelude.hs +++ b/ghc/lib/hugs/Prelude.hs @@ -370,7 +370,9 @@ class Enum a where -- Minimal complete definition: toEnum, fromEnum succ = toEnum . (1+) . fromEnum pred = toEnum . subtract 1 . fromEnum + enumFrom x = map toEnum [ fromEnum x .. ] enumFromTo x y = map toEnum [ fromEnum x .. fromEnum y ] + enumFromThen x y = map toEnum [ fromEnum x, fromEnum y .. ] enumFromThenTo x y z = map toEnum [ fromEnum x, fromEnum y .. fromEnum z ] -- Read and Show classes ------------------------------------------------------