@@ -2,9 +2,10 @@
2import Debug.Trace
2import Debug.Trace
3import Control.Monad
3import Control.Monad
4import Data.List
4import Data.List
5−import qualified Data.Text.Lazy.Read as T
5+import qualified Data.Text.Read as T
6−import qualified Data.Text.Lazy.IO as T
6+import qualified Data.Text as T
7+import qualified Data.Text.Encoding as T
7−import qualified Data.Text.Lazy as T
8+import qualified Data.ByteString.Char8 as B
8import System.Environment
9import System.Environment
10dec = T.signed T.decimal :: T.Reader Int
11dec = T.signed T.decimal :: T.Reader Int
@@ -13,13 +14,13 @@ hex = T.signed T.hexadecimal :: T.Reader Int
14double = T.double :: T.Reader Double
15double = T.double :: T.Reader Double
16−def = double
17+rational = T.rational :: T.Reader Double
18−read1 :: Num a => T.Reader a -> T.Text -> a
19+read1 :: (Ord a, Num a) => T.Reader a -> T.Text -> a
19−read1 reader = foldl' go 0 . T.lines
20+read1 reader = foldl' go 1000000 . T.lines
20 where go z t = case reader t of
21 where go z t = case reader t of
21 Left err -> error err
22 Left err -> error err
22− Right (n,_) -> n
23+ Right (n,_) -> min n z
24--paranoid :: T.Text -> [(Double)]
25--paranoid :: T.Text -> [(Double)]
25paranoid = foldr go [] . T.lines
26paranoid = foldr go [] . T.lines
@@ -46,5 +47,10 @@ read2 reader = go 0
48 args <- getArgs
49 args <- getArgs
49− (print . read2 def) =<< T.getContents
50+ t <- T.decodeUtf8 `fmap` B.getContents
52+ ["dec"] -> print . read1 dec $ t
53+ ["hex"] -> print . read1 hex $ t
54+ ["double"] -> print . read1 double $ t
55+ ["rational"] -> print . read1 rational $ t
50 --mapM_ print =<< paranoid `fmap` T.getContents
56 --mapM_ print =<< paranoid `fmap` T.getContents