module Language.C.Data.InputStream (
InputStream, readInputStream,inputStreamToString,inputStreamFromString,
takeChar,inputStreamEmpty,takeChars,
countLines,
)
where
#ifndef NO_BYTESTRING
import Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Char8 as BS
#endif
readInputStream :: FilePath -> IO InputStream
inputStreamToString :: InputStream -> String
inputStreamFromString :: String -> InputStream
takeChar :: InputStream -> (Char, InputStream)
inputStreamEmpty :: InputStream -> Bool
takeChars :: Int -> InputStream -> [Char]
countLines :: InputStream -> Int
#ifndef NO_BYTESTRING
type InputStream = ByteString
takeChar bs = BS.head bs `seq` (BS.head bs, BS.tail bs)
inputStreamEmpty = BS.null
#ifndef __HADDOCK__
takeChars !n bstr = BS.unpack $ BS.take n bstr --leaks
#endif
readInputStream = BS.readFile
inputStreamToString = BS.unpack
inputStreamFromString = BS.pack
countLines = length . BS.lines
#else
type InputStream = String
takeChar bs = (head bs, tail bs)
inputStreamEmpty = null
takeChars n str = take n str
readInputStream = readFile
inputStreamToString = id
inputStreamFromString = id
countLines = length . lines
#endif