{-# LANGUAGE OverloadedStrings #-}

module NLP.Concraft.Format.Temp
( encodePar
, decodePar
, writePar
, readPar
) where

import qualified Data.ByteString.Lazy.Char8 as BC
import qualified Data.Text as T
import           Data.Aeson

import           NLP.Concraft.Morphosyntax

encodePar :: ToJSON w => [Sent w T.Text] -> BC.ByteString
encodePar = BC.unlines . map encode

decodePar :: FromJSON w => BC.ByteString -> [Sent w T.Text]
decodePar = 
    let getRight (Right x) = x
        getRight (Left e)  = error $ "error in decodePar: " ++ e
    in  map (getRight . eitherDecode') . BC.lines

writePar :: ToJSON w => FilePath -> [Sent w T.Text] -> IO ()
writePar path = BC.writeFile path . encodePar

readPar :: FromJSON w => FilePath -> IO [Sent w T.Text]
readPar = fmap decodePar . BC.readFile