HaRe-0.6: tools/base/tests/tiPreludeText.hs
module PreludeText where
type ShowS = String->String
class Show a where
show :: a -> String
showsPrec :: Int -> a -> ShowS
showString = (++)
showChar = (:)
-- Basic printing combinators (nonstd):
showParenArg :: Int -> ShowS -> ShowS
showParenArg d = showParen (10<=d)
showArgument x = showChar ' ' . showsPrec 10 x
showParen :: Bool -> ShowS -> ShowS
showParen b p = if b then showChar '(' . p . showChar ')' else p
lex :: ReadS String
lex = undefined
type ReadS a = String -> [(a,String)]
class Read a where
read :: String -> a
readsPrec :: Int -> ReadS a
-- Basic parsing combinators (nonstd):
readToken x t s = [(x,r)|(t',r)<-lex s,t'==t]
readParenArg :: Int -> ReadS a -> ReadS a
readParenArg d = readParen (10<=d)
readArgument s = readsPrec 10 s
readParen :: Bool -> ReadS a -> ReadS a
readParen b g = if b then mandatory else optional
where optional r = g r ++ mandatory r
mandatory r = [(x,u) | ("(",s) <- lex r,
(x,t) <- optional s,
(")",u) <- lex t ]
rf `readAp` rx = \ s0 -> [(f x,s2) | (f,s1)<-rf s0,(x,s2)<-rx s1]
readChoice rd1 rd2 s = rd1 s ++ rd2 s