{-# OPTIONS_HADDOCK hide #-}
module Data.Array.Repa.IO.Internals.Text
( hWriteValues
, readValues)
where
import System.IO
import Data.Char
hWriteValues
:: Show a
=> Handle
-> [a]
-> IO ()
hWriteValues :: forall a. Show a => Handle -> [a] -> IO ()
hWriteValues Handle
handle [a]
xx
= [a] -> IO ()
forall {a}. Show a => [a] -> IO ()
go [a]
xx
where go :: [a] -> IO ()
go [] = () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
go (a
x:[a]
xs)
= do Handle -> String -> IO ()
hPutStr Handle
handle (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ a -> String
forall a. Show a => a -> String
show a
x
Handle -> String -> IO ()
hPutStr Handle
handle (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"\n"
[a] -> IO ()
go [a]
xs
readValues :: (Num a, Read a) => String -> [a]
readValues :: forall a. (Num a, Read a) => String -> [a]
readValues String
cs = String -> String -> [a]
forall {a}. Read a => String -> String -> [a]
readValues' [] String
cs
where readValues' :: String -> String -> [a]
readValues' String
_ [] = []
readValues' String
acc (Char
c : String
rest)
| Char -> Bool
isSpace Char
c
= if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
acc
then String -> String -> [a]
readValues' [] String
rest
else String -> a
forall a. Read a => String -> a
read (String -> String
forall a. [a] -> [a]
reverse String
acc) a -> [a] -> [a]
forall a. a -> [a] -> [a]
: String -> String -> [a]
readValues' [] String
rest
| Char -> Bool
isDigit Char
c Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'.' Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'e' Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-'
= String -> String -> [a]
readValues' (Char
c Char -> String -> String
forall a. a -> [a] -> [a]
: String
acc) String
rest
| Bool
otherwise
= String -> [a]
forall a. HasCallStack => String -> a
error (String -> [a]) -> String -> [a]
forall a b. (a -> b) -> a -> b
$ String
"unexpected char in Matrix file " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (Char -> Int
ord Char
c)