@@ -2,9 +2,10 @@
22import Debug.Trace
33import Control.Monad
44import Data.List
5−import qualified Data.Text.Lazy.Read as T
6−import qualified Data.Text.Lazy.IO as T
7−import qualified Data.Text.Lazy as T
5+import qualified Data.Text.Read as T
6+import qualified Data.Text as T
7+import qualified Data.Text.Encoding as T
8+import qualified Data.ByteString.Char8 as B
89import System.Environment
910
1011dec = T.signed T.decimal :: T.Reader Int
@@ -13,13 +14,13 @@ hex = T.signed T.hexadecimal :: T.Reader Int
1314
1415double = T.double :: T.Reader Double
1516
16−def = double
17+rational = T.rational :: T.Reader Double
1718
18−read1 :: Num a => T.Reader a -> T.Text -> a
19−read1 reader = foldl' go 0 . T.lines
19+read1 :: (Ord a, Num a) => T.Reader a -> T.Text -> a
20+read1 reader = foldl' go 1000000 . T.lines
2021 where go z t = case reader t of
2122 Left err -> error err
22− Right (n,_) -> n
23+ Right (n,_) -> min n z
2324
2425--paranoid :: T.Text -> [(Double)]
2526paranoid = foldr go [] . T.lines
@@ -46,5 +47,10 @@ read2 reader = go 0
4647
4748main = do
4849 args <- getArgs
49− (print . read2 def) =<< T.getContents
50+ t <- T.decodeUtf8 `fmap` B.getContents
51+ case args of
52+ ["dec"] -> print . read1 dec $ t
53+ ["hex"] -> print . read1 hex $ t
54+ ["double"] -> print . read1 double $ t
55+ ["rational"] -> print . read1 rational $ t
5056 --mapM_ print =<< paranoid `fmap` T.getContents