module BuildBox.Data.Log
( Log
, Line
, empty
, null
, toString
, fromString
, (<|)
, (|>)
, (><)
, firstLines
, lastLines)
where
import Data.ByteString.Char8 (ByteString)
import Data.Sequence (Seq)
import qualified Data.ByteString.Char8 as BS
import qualified Data.Sequence as Seq
import qualified Data.Foldable as F
import Prelude hiding (null)
type Log = Seq Line
type Line = ByteString
empty :: Log
empty = Seq.empty
null :: Log -> Bool
null = Seq.null
toString :: Log -> String
toString ll
= BS.unpack
$ BS.intercalate (BS.pack "\n")
$ F.toList ll
fromString :: String -> Log
fromString str
= Seq.fromList
$ BS.splitWith (== '\n')
$ BS.pack str
(<|):: Line -> Log -> Log
(<|) = (Seq.<|)
(|>) :: Log -> Line -> Log
(|>) = (Seq.|>)
(><) :: Log -> Log -> Log
(><) = (Seq.><)
firstLines :: Int -> Log -> Log
firstLines m ll
= Seq.take m ll
lastLines :: Int -> Log -> Log
lastLines m ll
= Seq.drop (Seq.length ll m) ll