{-# LANGUAGE TypeApplications #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE AllowAmbiguousTypes #-} module Data.Tapioca.Internal.Types.ParseWithCsvMap where import Data.Tapioca.Internal.Types.CsvMap import Data.Tapioca.Internal.Types.GParseRecord import GHC.Exts import GHC.Generics import qualified Data.Csv as C class ParseWithCsvMap r t where parseWithCsvMap :: CsvMapped r => t -> C.Parser r instance Generic r => ParseWithCsvMap r C.NamedRecord where parseWithCsvMap namedRecord = parseFrom csvMap where parseFrom (CsvMap m :: CsvMap r) = to <$> gParseRecord @(Rep r) @r proxy# m namedRecord instance ParseWithCsvMap r C.Record where parseWithCsvMap record = parseFrom csvMap where parseFrom (CsvMap m :: CsvMap r) = to <$> gParseRecord @(Rep r) @r proxy# m record