packages feed

dataframe-parquet-th-1.1.0.0: src/DataFrame/Typed/TH/Parquet.hs

{- |
Module      : DataFrame.Typed.TH.Parquet
License     : MIT

Parquet-file-based typed-schema derivation. The typed counterpart of
'DataFrame.TH.Parquet.declareColumnsFromParquetFile': instead of binding one
@Expr@ per column, it generates a type synonym describing the file's schema,
suitable for 'DataFrame.Typed.freeze' / @readParquet \@Schema@.

@
deriveSchemaFromParquetFile \"Trips\" \"trips.parquet\"
-- generates:  type Trips = '[Column \"id\" Int, Column \"fare\" Double, ...]
@
-}
module DataFrame.Typed.TH.Parquet (
    deriveSchemaFromParquetFile,
) where

import Control.Monad.IO.Class (liftIO)
import Language.Haskell.TH

import qualified DataFrame.IO.Parquet as Parquet
import DataFrame.Typed.TH.Records (deriveSchema)

-- | Derive a typed schema synonym from a Parquet file (or directory\/glob).
deriveSchemaFromParquetFile :: String -> String -> DecsQ
deriveSchemaFromParquetFile typeName path = do
    df <- liftIO (Parquet.readParquetFiles path)
    deriveSchema typeName df