{-# LANGUAGE OverloadedStrings #-} 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)