\begin{code}
{-
+-------------- Stage 1 -----------------------
+
data [] a = [] | a : [a] -- do explicitly: deriving (Eq, Ord)
-- to avoid weird names like con2tag_[]#
instance Functor [] where
class Functor f where
map :: (a -> b) -> f a -> f b
-class Eval a
-
data Bool = False | True
data Int = I# Int#
data Double = D# Double#
-- (avoids weird-named functions, e.g., con2tag_()#
data Maybe a = Nothing | Just a
-data Ordering = LT | EQ | GT deriving( Eq, Ord )
+data Ordering = LT | EQ | GT -- deriving( Eq, Ord )
type String = [Char]
data Char = C# Char#
+y = let f :: Char -> Int
+ f x = x
+ in f
-------------- Stage 2 -----------------------
not True = False
%*********************************************************
%* *
-\subsection{Standard classes @Eq@, @Ord@, @Bounded@, @Eval@}
+\subsection{Standard classes @Eq@, @Ord@, @Bounded@
%* *
%*********************************************************
class Bounded a where
minBound, maxBound :: a
-
--- Leave this in for now; to make it easier to silently
--- discard Evals from Haskell 1.4 contexts
-class Eval a
\end{code}
%*********************************************************
Bounded(..),
Enum(..), succ, pred,
Show(..), ShowS, shows, show, showChar, showString, showParen,
- Eval(..), seq, strict,
+ seq, strict,
Bool(..), (&&), (||), not, otherwise,
Char, String, Int, Integer, Float, Double, Void,
Maybe(..), maybe,