repa-io-3.4.0.1: Data/Array/Repa/IO/Internals/Text.hs
{-# 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)