dataframe-th 1.0.1.2 → 2.0.0.0
raw patch · 3 files changed
+24/−25 lines, 3 filesdep ~containersdep ~dataframe-coredep ~dataframe-operations
Dependency ranges changed: containers, dataframe-core, dataframe-operations, dataframe-parsing, vector
Files
- dataframe-th.cabal +12/−9
- src/DataFrame/Internal/Schema/TH.hs +3/−16
- src/DataFrame/Typed/TH/Records.hs +9/−0
dataframe-th.cabal view
@@ -1,6 +1,6 @@-cabal-version: 2.4+cabal-version: 3.4 name: dataframe-th-version: 1.0.1.2+version: 2.0.0.0 synopsis: Record-based Template Haskell splices for the dataframe ecosystem. description:@@ -28,16 +28,19 @@ library import: warnings exposed-modules:- DataFrame.Internal.Schema.TH DataFrame.TH.Records DataFrame.Typed.TH.Records+ -- Internal record→schema TH; sealed (superseded publicly by+ -- @deriveSchemaFromType@ in DataFrame.Typed.TH.Records).+ other-modules: DataFrame.Internal.Schema.TH build-depends: base >= 4 && < 5,- containers >= 0.6.7 && < 0.9,- dataframe-core ^>= 1.1,- dataframe-operations ^>= 1.1.1,- dataframe-parsing ^>= 1.0.2,+ containers >= 0.6.7 && < 0.10,+ dataframe-core >= 2.0 && < 2.1,+ dataframe-core:internal >= 2.0 && < 2.1,+ dataframe-operations >= 2.0 && < 2.1,+ dataframe-parsing >= 2.0 && < 2.1, template-haskell >= 2.0 && < 3,- text >= 2.0 && < 3,- vector ^>= 0.13+ text >= 2.1 && < 3,+ vector >= 0.13 && < 0.15 hs-source-dirs: src default-language: Haskell2010
src/DataFrame/Internal/Schema/TH.hs view
@@ -18,25 +18,12 @@ import Language.Haskell.TH import DataFrame.Internal.Expression (Expr)-import DataFrame.Internal.Schema (Schema, makeSchema, schemaType) import DataFrame.Operators (col)+import DataFrame.Schema (Schema, makeSchema, schemaType) {- | Auto-generate a runtime 'Schema' (and per-column @'Expr'@ accessors)-from a record ADT.--The splice reifies the record, applies @camelCase -> snake_case@ to each-record-selector name, and emits:--* a top-level @\<lower-first TyConName\>Schema :: 'Schema'@ binding suitable- for passing to 'DataFrame.IO.CSV.readCsvWithSchema'.-* one @\<lower-first TyConName\>\<UpperFirst FieldName\> :: 'Expr' /ty/@ binding- per field, so you can refer to columns in expression DSL code by name- without writing @col \@/ty/ "snake_case_name"@ at every call site.--The data type must have exactly one record constructor; sum types or-positional constructors fail the splice with a descriptive error. Field-types must satisfy @('Columnable' a, 'Read' a)@ — the same constraints-'schemaType' already requires.+from a record ADT. Emits @\<tyName\>Schema@ plus one accessor per field+(@camelCase -> snake_case@). Requires a single record constructor. -} deriveSchema :: Name -> DecsQ deriveSchema tyName = do
src/DataFrame/Typed/TH/Records.hs view
@@ -19,6 +19,7 @@ -- * ADT-based schema derivation deriveSchemaFromType, deriveSchemaFromTypeWith,+ deriveSchemaValues, SchemaOptions (..), defaultSchemaOptions, camelToSnake,@@ -42,6 +43,7 @@ import qualified DataFrame.Internal.Column as C import qualified DataFrame.Internal.DataFrame as D+import qualified DataFrame.Internal.Schema.TH as SchemaTH import DataFrame.Typed.Record ( HasSchema, Schema,@@ -51,6 +53,13 @@ ) import DataFrame.Typed.Types (Column, TypedDataFrame) import DataFrame.Typed.Util (camelToSnake)++{- | Derive an untyped 'DataFrame.Schema.Schema' value plus per-column 'Expr'+accessors from a record type. The value-level companion to+'deriveSchemaFromType': @$(deriveSchemaValues ''Order)@ generates @orderSchema@.+-}+deriveSchemaValues :: Name -> DecsQ+deriveSchemaValues = SchemaTH.deriveSchema deriveSchema :: String -> D.DataFrame -> DecsQ deriveSchema typeName df = do