Skip to content

Commit

Permalink
Actually output separators in encode
Browse files Browse the repository at this point in the history
  • Loading branch information
tibbe committed Mar 30, 2012
1 parent 579f5c7 commit 21262be
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions Data/Ceason/Encode.hs
Expand Up @@ -13,9 +13,11 @@ module Data.Ceason.Encode
) where

import Blaze.ByteString.Builder
import Blaze.ByteString.Builder.Char8
import qualified Data.ByteString.Lazy as L
import Data.Monoid
import qualified Data.Vector as V
import Prelude hiding (unlines)

import Data.Ceason.Types

Expand All @@ -24,6 +26,19 @@ import Data.Ceason.Types
-- | Efficiently serialize CVS records as a lazy 'L.ByteString'.
encode :: ToRecord a => V.Vector a -> L.ByteString
encode = toLazyByteString
. mconcat
. map (fromLazyByteString . L.fromChunks . V.toList . toRecord)
. unlines
. map (mconcat . intersperse (fromChar ',') . map fromByteString
. V.toList . toRecord)
. V.toList

unlines :: [Builder] -> Builder
unlines [] = mempty
unlines (b:bs) = b <> fromString "\r\n" <> unlines bs

intersperse :: Builder -> [Builder] -> [Builder]
intersperse _ [] = []
intersperse sep (x:xs) = x : prependToAll sep xs

prependToAll :: Builder -> [Builder] -> [Builder]
prependToAll _ [] = []
prependToAll sep (x:xs) = sep <> x : prependToAll sep xs

0 comments on commit 21262be

Please sign in to comment.