packages feed

ixset-typed-cassava-0.0.2.0: src/Data/Csv/IxSet/Typed.hs

module Data.Csv.IxSet.Typed (decodeByName, encodeByName) where

import Data.ByteString.Lazy
import qualified Data.Csv
import Data.IxSet.Typed as Ix
import Data.Vector as V

-- Like `Data.Csv.decodeByName` but for `IxSet`.
--
-- @since 0.0.2.0
decodeByName :: (Ix.Indexable ixs xs, Data.Csv.FromNamedRecord xs) => ByteString -> Either String (Data.Csv.Header, Ix.IxSet ixs xs)
decodeByName = fmap (fmap (Ix.fromList . V.toList)) . Data.Csv.decodeByName

-- Like `Data.Csv.encodeByName` but for `IxSet`.
--
-- @since 0.0.2.0
encodeByName :: (Ix.Indexable ixs xs, Data.Csv.ToNamedRecord xs) => Data.Csv.Header -> Ix.IxSet ixs xs -> ByteString
encodeByName h = Data.Csv.encodeByName h . Ix.toList