{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE OverloadedStrings #-}
module Statistics.Load
( loadNamedEntities
) where
import Data.List (sort)
import qualified Data.Foldable as F
import qualified Data.Map.Strict as Map
import qualified Data.Sequence as Seq
import qualified Data.Text as T
import qualified Data.Text.Read as T
import qualified Data.Vector as V
import Statistics.Types
loadNamedEntities :: V.Vector (Map.Map T.Text T.Text) -> [NamedEntity]
loadNamedEntities = fmap (uncurry NamedEntity)
. Map.toAscList
. Map.map (fmap snd . sort . F.toList)
. Map.fromListWith (Seq.><)
. fmap lookupInfo
. V.toList
where
lookupErr x = Map.findWithDefault (error $ "Missing column: " <> show x) x
lookupInfo m =
( Name $ lookupErr "name" m
, Seq.singleton ( lookupErr "replicate" m
, either error fst . T.double $ lookupErr "value" m
)
)