@@ -0,0 +1,49 @@
4+import qualified Data.Text.Lex as T
5+import qualified Data.Text.IO as T
6+import qualified Data.Text as T
7+import System.Environment
9+dec = T.signed T.decimal :: T.Lexer Int
11+hex = T.signed T.hexadecimal :: T.Lexer Int
13+double = T.double :: T.Lexer Double
17+read1 :: Num a => T.Lexer a -> T.Text -> a
18+read1 reader = foldl' go 0 . T.lines
19+ where go z t = case reader t of
20+ Left err -> error err
23+--paranoid :: T.Text -> [(Double)]
24+paranoid = foldr go [] . T.lines
25+ where go t xs = let a = case T.double t of
26+ Left err -> error err
28+ b = case T.rational t of
29+ Left err -> error err
32+ then abs ((a-b)/a) : xs
35+read2 :: Num a => T.Lexer a -> T.Text -> a
40+ | otherwise = case reader t of
41+ Left err -> error err
42+ Right (n,t') -> case T.uncons t' of
44+ Just (_,t'') -> go t''
48+ (print . read2 def) =<< T.getContents
49+ --mapM_ print =<< paranoid `fmap` T.getContents