packages feed

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

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

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

-- Like `Data.Csv.decodeByName` but for `IxSet`.
--
-- @since 0.0.1.0
decodeByName :: (Ix.Indexable ixs xs, FromNamedRecord xs) => ByteString -> Either String (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.1.0
encodeByName :: (Ix.Indexable ixs xs, ToNamedRecord xs) => Header -> Ix.IxSet ixs xs -> ByteString
encodeByName h = Data.Csv.encodeByName h . Ix.toList