module Data.FixedWidth.Examples where
import Data.FixedWidth (lineIterator)
import Data.FixedWidth.Parsers
import Data.Aeson
import Data.Attoparsec.Text as StrictText
import qualified Data.ByteString.Lazy.Char8 as BLC
import qualified Data.Text as T
data Entry = Entry {eDate :: Date,
eNames :: [T.Text],
eValue :: Int} deriving Show
entry :: Parser Entry
entry = do
date <- fixDate8
names <- count 4 (StrictText.take 4)
(Just value) <- fixInt 3
return $ Entry date names value
instance ToJSON Entry where
toJSON (Entry date names value) =
object ["date" .= date,
"names" .= names,
"value" .= value]
putJSONLineIterator :: T.Text -> IO ()
putJSONLineIterator =
lineIterator entry (putStrLn "Unparseable line.")
(BLC.putStrLn . encode)