HaRe-0.6: tools/base/tests/tiPrelude.hs
module Prelude(module Prelude,module PreludeText) where
import PreludeText
default (Int)
-- Primitive types
data Char
data Int
data Integer
data Float
data Double
data () = () deriving (Eq,Show,Bounded,Ord,Read)
data (,) a b = (,) a b deriving (Eq,Show,Bounded,Ord)
data (,,) a b c = (,,) a b c
data (,,,) a b c d = (,,,) a b c d
data (->) a b
data [] a = [] | a : [a] deriving (Eq,Show,Ord,Read)
data Bool = False | True deriving (Eq,Show,Bounded,Enum,Ord,Read)
data Either a b = Left a | Right b deriving (Eq,Show,Ord,Read)
data Maybe a = Nothing | Just a deriving (Eq,Show,Ord,Read)
type String = [Char]
undefined | False = undefined
error s = undefined
either f g (Left x) = f x
either f g (Right y) = g y
maybe n j Nothing = n
maybe n j (Just x) = j x
--foldr :: (a->b->b)->b->[a]->b
foldr c n [] = n
foldr c n (x:xs) = c x (foldr c n xs)
filter p xs = [x|x<-xs,p x]
infixr 3 &&
True && b = b
_ && _ = False
infix 4 ==,/=
class Eq a where
(==),(/=) :: a -> a -> Bool
a/=b = not (a==b)
not False = True
not True = False
lexOrder EQ o = o
lexOrder o _ = o
class (Eq a,Show a) => Num a where
fromInteger :: Integer -> a
fromInt :: Int -> a
(+),(-),(*) :: a -> a -> a
negate :: a->a
-- ...
class Enum a where
succ, pred :: a -> a
toEnum :: Int -> a
fromEnum :: a -> Int
enumFrom :: a -> [a]
enumFromThen,enumFromTo :: a -> a -> [a]
enumFromThenTo :: a -> a -> a -> [a]
class Monad m where
return :: a -> m a
(>>) :: m a -> m b -> m b
(>>=) :: m a -> (a -> m b) -> m b
fail :: String -> m a
--m1>>m2 = m1 >>= const m2
m2 =<< m1 = m1 >>= m2
id x = x
const x y = x
flip f x y = f y x
infixr 9 .
--(.) :: (b->c)->(a->b)->(a->c)
(f . g) x = f (g x)
instance Show Int
instance Read Int
instance Enum Int
instance Num Int
instance Enum Char
instance Eq Char
instance Eq Int
instance Ord Int
{-
instance Eq Bool where
True==True = True
False==False = True
_ == _ = False
-}
{-
instance Eq a => Eq [a] where
[] == [] = True
(x:xs) == (y:ys) = (x==y) && (xs==ys)
--}
class Functor f where fmap :: (a->b) -> f a -> f b
--(++) :: [a] -> [a] -> [a]
[] ++ ys = ys
(x:xs) ++ ys = x:(xs++ys)
length :: [a]->Int
length [] = 0
length (x:xs) = 1 + length xs
--map :: (a->b)->[a]->[b]
map f = foldr ((:).f) []
concatMap f = foldr ((++).f) []
--map f [] = []
--map f (x:xs) = f x:map f xs
instance Functor [] where
fmap = map
fst (x,y) = x
snd = \ p -> case p of
(x,y) -> y
--until :: (a -> Bool) -> (a -> a) -> a -> a
until p f x
| p x = x
| otherwise = until p f (f x)
otherwise = True
------
data World
data IO a = IO (World->(a,World)) -- for example
instance Monad IO
print x = putStrLn (show x)
foreign import putStr :: String -> IO ()
foreign import putStrLn :: String -> IO ()
class (Real a,Enum a) => Integral a where
toInteger :: a->Integer
class (Num a,Ord a) => Real a where
toRational :: a -> Rational
type Rational = Ratio Integer
data Ratio a = a :% a
class Eq a => Ord a where
compare :: a -> a -> Ordering
(<),(<=),(>=),(>) :: a -> a -> Bool
data Ordering = LT | EQ | GT deriving (Eq,Bounded,Enum,Ord,Show,Read)
class Bounded a where minBound,maxBound::a