{-# OPTIONS_HADDOCK hide #-} module Data.Array.Repa.IO.Internals.Text ( hWriteValues , readValues) where import System.IO import Data.Char -- Stuff shared with Matrix module ------------------------------------------------------------- -- | Write out values to a file. hWriteValues :: Show a => Handle -> [a] -- ^ Data values. -> IO () hWriteValues handle xx = go xx where go [] = return () go (x:xs) = do hPutStr handle $ show x hPutStr handle $ "\n" go xs -- | Read a string containing ints separated by whitespace. readValues :: (Num a, Read a) => String -> [a] readValues cs = readValues' [] cs where readValues' _ [] = [] readValues' acc (c : rest) | isSpace c = if null acc then readValues' [] rest else read (reverse acc) : readValues' [] rest | isDigit c || c == '.' || c == 'e' || c == '-' = readValues' (c : acc) rest | otherwise = error $ "unexpected char in Matrix file " ++ show (ord c)