packages feed

gipeda-0.1: src/ParentMap.hs

module ParentMap where

import Data.Csv hiding (encode)
import qualified Data.Map as M
import Data.List.Split
import qualified Data.ByteString.Lazy as BS
import qualified Data.Vector as V
import Data.Char
import Data.Functor

type Hash = String
type ParentMap = M.Map Hash Hash

ssvFileToMap :: FilePath -> IO ParentMap
ssvFileToMap fname = ssvToMap <$> BS.readFile fname

ssvToMap :: BS.ByteString -> M.Map Hash Hash
ssvToMap s = M.fromList 
    [ (k,p)
    | (k,parentList) <- either error V.toList $ decodeWith ssv NoHeader s
    , let parents = splitOn " " parentList
    , p:_ <- return parents
    ]
    
ssv :: DecodeOptions
ssv = defaultDecodeOptions {
    decDelimiter = fromIntegral (ord ';')
}