packages feed

Cabal revisions of dataframe-3.3.0.0

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-cabal-version:      3.4-name:               dataframe-version:            3.3.0.0-synopsis: A fast, safe, and intuitive DataFrame library.--description: A fast, safe, and intuitive DataFrame library for exploratory data analysis.--bug-reports: https://github.com/mchav/dataframe/issues-license:            MIT-license-file:       LICENSE-author:             Michael Chavinda-maintainer:         mschavinda@gmail.com--copyright: (c) 2024-2026 Michael Chavinda-category: Data-tested-with: GHC ==9.4.8 || ==9.6.7 || ==9.8.4 || ==9.10.3 || ==9.12.2-extra-doc-files: CHANGELOG.md README.md-extra-source-files: cbits/arrow_abi.h-                    tests/data/typing/texts.txt-                    tests/data/typing/texts_with_empties.txt-                    tests/data/typing/texts_with_empties_and_nullish.txt-                    data/titanic/*.csv-                    data/ml/*.csv-                    data/ml/golden.json-                    data/sharded/*.parquet-                    tests/data/*.csv-                    tests/data/*.tsv-                    tests/data/*.parquet-                    tests/data/unstable_csv/*.csv-                    tests/data/unstable_csv/*.tsv-                    -- tests/data/*.md-                    -- tests/data/*.bin-                    -- tests/data/*.json-                    -- tests/data/*.txt-                    -- tests/data/*.encrypted--source-repository head-  type:     git-  location: https://github.com/mchav/dataframe--common warnings-    ghc-options:-        -Wall--flag no-csv-    default:     False-    manual:      True-    description: Exclude the CSV reader/writer (@dataframe-csv@). Enable-                 with @-f +no-csv@ (or @flags: no-csv@ in cabal.project)-                 to trim the dep set of the meta package when CSV is not-                 needed.--flag no-parquet-    default:     False-    manual:      True-    description: Exclude the Parquet reader/writer (@dataframe-parquet@-                 plus pinch, zstd, snappy). Enable with-                 @-f +no-parquet@. (Reading Parquet from HuggingFace lives-                 in the separate @dataframe-huggingface@ package, which is-                 not a dependency of this meta-package.)--flag no-th-    default:     False-    manual:      True-    description: Exclude the Template Haskell splices (@dataframe-th@,-                 @dataframe-csv-th@, @dataframe-parquet-th@). Enable-                 with @-f +no-th@ to drop the @template-haskell@ dep for-                 downstream packages that don't use compile-time schema-                 derivation.--library-    import: warnings-    default-extensions: Strict-    -- Lock the unused-packages gate locally; haskell-ci already runs the-    -- same Werror against this stanza. Catches the case where a satellite-    -- gets added to build-depends but never re-exported.-    ghc-options: -Werror=unused-packages-    exposed-modules: DataFrame,-                    DataFrame.Typed-    reexported-modules: DataFrame.Functions,-                        DataFrame.Synthesis,-                        DataFrame.Display.Web.Plot,-                        DataFrame.Display.Web.Chart,-                        DataFrame.Display.Web.Chart.Typed,-                        DataFrame.Core,-                        DataFrame.Schema,-                        DataFrame.Errors,-                        DataFrame.Operations.Core,-                        DataFrame.Operations.Join,-                        DataFrame.Operations.Merge,-                        DataFrame.Operators,-                        DataFrame.Operations.Permutation,-                        DataFrame.Operations.Subset,-                        DataFrame.Operations.Statistics,-                        DataFrame.Operations.Transformations,-                        DataFrame.Operations.Typing,-                        DataFrame.Operations.Aggregation,-                        DataFrame.Display,-                        DataFrame.Display.Terminal.Plot,-                        DataFrame.Monad,-                        DataFrame.DecisionTree,-                        DataFrame.Model,-                        DataFrame.ModelSelection,-                        DataFrame.LinearModel,-                        DataFrame.LinearModel.Regression,-                        DataFrame.LinearModel.Logistic,-                        DataFrame.Segmented,-                        DataFrame.SVM,-                        DataFrame.KMeans,-                        DataFrame.PCA,-                        DataFrame.DBSCAN,-                        DataFrame.GMM,-                        DataFrame.Boosting,-                        DataFrame.Boosting.GBM,-                        DataFrame.Boosting.AdaBoost,-                        DataFrame.Metrics,-                        DataFrame.IO.JSON,-                        DataFrame.Expr.Serialize,-                        DataFrame.IR.ExprJson,-                        DataFrame.Typed.Types,-                        DataFrame.Typed.Schema,-                        DataFrame.Typed.Freeze,-                        DataFrame.Typed.Access,-                        DataFrame.Typed.Operations,-                        DataFrame.Typed.Join,-                        DataFrame.Typed.Aggregate,-                        DataFrame.Typed.Expr,-                        DataFrame.Typed.Record,-                        DataFrame.Typed.Generic-    build-depends:    base >= 4 && <5,-                      dataframe-core >= 2.2 && < 2.3,-                      dataframe-json >= 1.2.0.1 && < 1.3,-                      dataframe-expr-serializer >= 1.2.0.1 && < 1.3,-                      dataframe-operations >= 2.2 && < 2.3,-                      dataframe-parsing >= 2.2 && < 2.3,-                      dataframe-viz >= 1.3 && < 1.4,-                      dataframe-learn >= 2.2 && < 2.3--    if !flag(no-csv)-        reexported-modules: DataFrame.IO.CSV,-                            DataFrame.Typed.IO.CSV-        build-depends:   dataframe-csv >= 2.3 && < 2.4-        cpp-options:     -DWITH_CSV--    if !flag(no-parquet)-        reexported-modules: DataFrame.IO.Parquet,-                            DataFrame.IO.Parquet.Binary,-                            DataFrame.IO.Parquet.Dictionary,-                            DataFrame.IO.Parquet.Levels,-                            DataFrame.IO.Parquet.Thrift,-                            DataFrame.IO.Parquet.Decompress,-                            DataFrame.IO.Parquet.Encoding,-                            DataFrame.IO.Parquet.Page,-                            DataFrame.IO.Parquet.Schema,-                            DataFrame.IO.Parquet.Utils,-                            DataFrame.IO.Parquet.Seeking,-                            DataFrame.IO.Parquet.Time,-                            DataFrame.IO.Utils.RandomAccess,-                            DataFrame.Typed.IO.Parquet-        build-depends:   dataframe-parquet >= 1.5 && < 1.6-        cpp-options:     -DWITH_PARQUET--    -- The lazy executor calls both CSV and Parquet readers directly, so-    -- it can only be pulled in when both backends are present.-    if !flag(no-csv) && !flag(no-parquet)-        reexported-modules: DataFrame.Lazy,-                            DataFrame.Lazy.IO.Binary,-                            DataFrame.Lazy.IO.CSV,-                            DataFrame.Typed.Lazy-        build-depends:   dataframe-lazy >= 2.3 && < 2.4-        cpp-options:     -DWITH_LAZY--    if !flag(no-th)-        build-depends:   dataframe-th >= 2.2 && < 2.3-        cpp-options:     -DWITH_TH-        exposed-modules: DataFrame.TH,-                         DataFrame.Typed.TH--    if !flag(no-th) && !flag(no-csv)-        build-depends:   dataframe-csv-th >= 1.3 && < 1.4-        cpp-options:     -DWITH_CSV_TH--    if !flag(no-th) && !flag(no-parquet)-        build-depends:   dataframe-parquet-th >= 1.3 && < 1.4-        cpp-options:     -DWITH_PARQUET_TH--    hs-source-dirs:   src-    default-language: Haskell2010--library arrow-bridge-    import: warnings-    visibility: public-    hs-source-dirs:   ffi-    exposed-modules:  DataFrame.IO.Arrow-                      DataFrame.IR-    -- The expr/pipeline JSON codec now lives in its own lightweight package;-    -- re-export it so the Python FFI and Haskell consumers keep importing-    -- @DataFrame.IR.ExprJson@ unchanged.-    reexported-modules: DataFrame.IR.ExprJson-    -- The Arrow bridge IR loads CSV + Parquet readers, so it requires-    -- both backends. If either flag is off, skip building it.-    if flag(no-csv) || flag(no-parquet)-        buildable: False-    build-depends:-        base        >= 4   && < 5,-        dataframe-core >= 2.2 && < 2.3,-        dataframe-expr-serializer >= 1.2.0.1 && < 1.3,-        dataframe-csv >= 2.3 && < 2.4,-        dataframe-json >= 1.2.0.1 && < 1.3,-        dataframe-lazy >= 2.3 && < 2.4,-        dataframe-operations >= 2.2 && < 2.3,-        dataframe-parquet >= 1.5 && < 1.6,-        dataframe-parsing >= 2.2 && < 2.3,-        text        >= 2.1 && < 3,-        aeson       >= 0.11 && < 3,-        bytestring  >= 0.11 && < 0.14,-        containers  >= 0.6.7 && < 0.10,-        vector      >= 0.13 && < 0.15-    include-dirs:     cbits-    default-language: Haskell2010--executable dataframe-benchmark-example-    import: warnings-    main-is: Benchmark.hs-    build-depends:    base >= 4 && < 5,-                      dataframe >= 3.3 && < 3.4,-                      dataframe-operations >= 2.2 && < 2.3,-                      random >= 1 && < 2,-                      time >= 1.12 && < 2,-                      vector >= 0.13 && < 0.15,-    hs-source-dirs:   app-    default-language: Haskell2010-    ghc-options: -rtsopts -threaded -with-rtsopts=-N--executable synthesis-    import: warnings-    main-is: Synthesis.hs-    build-depends:    base >= 4 && < 5,-                      dataframe >= 3.3 && < 3.4,-                      dataframe-core >= 2.2 && < 2.3,-                      dataframe-learn >= 2.2 && < 2.3,-                      dataframe-operations >= 2.2 && < 2.3,-                      random >= 1 && < 2,-                      text >= 2.1 && < 3-    hs-source-dirs:   app-    default-language: Haskell2010-    ghc-options: -rtsopts -threaded -with-rtsopts=-N--executable dataframe-    import: warnings-    main-is: Main.hs-    build-depends:    base >= 4 && < 5,-                      directory >= 1.3.0.0 && < 2,-                      filepath >= 1.4 && < 2,-                      process >= 1.6 && < 2,-                      time >= 1.12 && < 2-    if !os(windows)-        build-depends: unix >= 2 && < 3-    hs-source-dirs:   app-    default-language: Haskell2010-    ghc-options: -rtsopts -threaded -with-rtsopts=-N--executable lazy-bench-    import: warnings-    main-is: LazyBenchmark.hs-    -- lazy-bench drives the lazy executor against CSV/Parquet sources, so-    -- it can only build when both backends are present.-    if flag(no-csv) || flag(no-parquet)-        buildable: False-    build-depends:    base >= 4 && < 5,-                      bytestring >= 0.11 && < 0.14,-                      containers >= 0.6.7 && < 0.10,-                      dataframe >= 3.3 && < 3.4,-                      dataframe-core >= 2.2 && < 2.3,-                      dataframe-lazy >= 2.3 && < 2.4,-                      dataframe-parsing >= 2.2 && < 2.3,-                      directory >= 1.3.0.0 && < 2,-                      random >= 1 && < 2,-                      text >= 2.1 && < 3,-                      time >= 1.12 && < 2,-    hs-source-dirs:   app-    default-language: Haskell2010-    ghc-options: -rtsopts -threaded -with-rtsopts=-N--benchmark dataframe-benchmark-    import: warnings-    type: exitcode-stdio-1.0-    main-is: Main.hs-    hs-source-dirs: benchmark-    build-depends: base >= 4 && < 5,-                   criterion >= 1 && < 2,-                   deepseq >= 1.4 && < 2,-                   process >= 1.6 && < 2,-                   dataframe >= 3.3 && < 3.4,-                   dataframe-core >= 2.2 && < 2.3,-                   dataframe-operations >= 2.2 && < 2.3,-                   random >= 1 && < 2,-    default-language: Haskell2010-    ghc-options:-      -threaded-      -rtsopts-      -with-rtsopts=-N--test-suite tests-    import: warnings-    type: exitcode-stdio-1.0-    main-is: Main.hs-    -- Threaded RTS with -N so the parallel-grouping parity test exercises the-    -- real multi-capability fork path rather than the sequential fallback.-    ghc-options: -threaded -rtsopts -with-rtsopts=-N-    -- The test runner imports CSV, JSON, Parquet, Lazy, and TH-derived-    -- schema modules. All features must be enabled for it to compile.-    if flag(no-csv) || flag(no-parquet) || flag(no-th)-        buildable: False-    other-modules: Assertions,-                   Functions,-                   GenDataFrame,-                   Internal.ColumnBuilder,-                   Internal.DictEncode,-                   Internal.Markdown,-                   Internal.PackedText,-                   Internal.Parsing,-                   PackedTextMigration,-                   PrettyPrint,-                   Learn.Denotation,-                   Learn.Models,-                   Learn.TypedModel,-                   Learn.Segmented,-                   Learn.Ensembles,-                   Learn.SklearnParity,-                   Learn.Synthesis,-                   Learn.MetricsTests,-                   Learn.Metamorphic,-                   IO.CSV,-                   IO.CsvGolden,-                   IO.JSON,-                   IR.ExprJsonRoundtrip,-                   Operations.Aggregations,-                   Operations.Apply,-                   Operations.Core,-                   Operations.Derive,-                   Operations.Filter,-                   Operations.GroupBy,-                   Operations.ParallelGroupBy,-                   Operations.ParallelJoin,-                   Operations.Inference,-                   Operations.InsertColumn,-                   Operations.Join,-                   Operations.Merge,-                   Operations.Nullable,-                   Operations.NullableHashing,-                   Operations.Provenance,-                   Operations.ReadCsv,-                   Operations.Window,-                   Operations.WriteCsv,-                   Operations.Shuffle,-                   Operations.Sort,-                   Operations.SetOps,-                   Operations.Subset,-                   Operations.Statistics,-                   Operations.Take,-                   Operations.Typing,-                   Operations.VectorKernel,-                   Operations.Record,-                   LazyParquet,-                   LazyParity,-                   LazyProjection,-                   Parquet,-                   ParquetTestData,-                   Plotting,-                   Properties,-                   Properties.Categorical,-                   Simplify,-                   Typed.Parity,-                   Typed.IOReaders,-                   Monad-    build-depends:  base >= 4 && < 5,-                    aeson >= 0.11.0.0 && < 3,-                    bytestring >= 0.11 && < 0.14,-                    dataframe >= 3.3 && < 3.4,-                    dataframe-core >= 2.2 && < 2.3,-                    dataframe-core >= 2.2 && < 2.3,-                    dataframe-csv >= 2.3 && < 2.4,-                    dataframe-expr-serializer >= 1.2.0.1 && < 1.3,-                    dataframe-fastcsv >= 1.4.0.1 && < 1.5,-                    dataframe-json >= 1.2.0.1 && < 1.3,-                    dataframe-lazy >= 2.3 && < 2.4,-                    dataframe-learn >= 2.2 && < 2.3,-                    dataframe-operations >= 2.2 && < 2.3,-                    dataframe-parquet >= 1.5 && < 1.6,-                    dataframe-parsing >= 2.2 && < 2.3,-                    HUnit >= 1.6 && < 1.8,-                    QuickCheck >= 2 && < 3,-                    random-shuffle >= 0.0.4 && < 1,-                    random >= 1 && < 2,-                    text >= 2.1 && < 3,-                    time >= 1.12 && < 2,-                    vector >= 0.13 && < 0.15,-                    temporary >= 1.3 && < 1.5,-                    directory >= 1.3 && < 1.4,-                    containers >= 0.6.7 && < 0.10-    hs-source-dirs: tests-    default-language: Haskell2010---- Focused oracle for the packed-text column variant. Kept as its own suite so--- it can run independently of the (heavier) `tests` runner.-test-suite packed-text-    import: warnings-    type: exitcode-stdio-1.0-    main-is: PackedTextMain.hs-    if flag(no-csv) || flag(no-parquet) || flag(no-th)-        buildable: False-    other-modules: Internal.PackedText-    build-depends:  base >= 4 && < 5,-                    bytestring >= 0.11 && < 0.14,-                    dataframe >= 3.3 && < 3.4,-                    dataframe-core >= 2.2 && < 2.3,-                    dataframe-operations >= 2.2 && < 2.3,-                    HUnit >= 1.6 && < 1.8,-                    text >= 2.1 && < 3,-                    vector >= 0.13 && < 0.15-    hs-source-dirs: tests-    default-language: Haskell2010+cabal-version:      3.4
+name:               dataframe
+version:            3.3.0.0
+x-revision: 1
+synopsis: A fast, safe, and intuitive DataFrame library.
+
+description: A fast, safe, and intuitive DataFrame library for exploratory data analysis.
+
+bug-reports: https://github.com/mchav/dataframe/issues
+license:            MIT
+license-file:       LICENSE
+author:             Michael Chavinda
+maintainer:         mschavinda@gmail.com
+
+copyright: (c) 2024-2026 Michael Chavinda
+category: Data
+tested-with: GHC ==9.4.8 || ==9.6.7 || ==9.8.4 || ==9.10.3 || ==9.12.2
+extra-doc-files: CHANGELOG.md README.md
+extra-source-files: cbits/arrow_abi.h
+                    tests/data/typing/texts.txt
+                    tests/data/typing/texts_with_empties.txt
+                    tests/data/typing/texts_with_empties_and_nullish.txt
+                    data/titanic/*.csv
+                    data/ml/*.csv
+                    data/ml/golden.json
+                    data/sharded/*.parquet
+                    tests/data/*.csv
+                    tests/data/*.tsv
+                    tests/data/*.parquet
+                    tests/data/unstable_csv/*.csv
+                    tests/data/unstable_csv/*.tsv
+                    -- tests/data/*.md
+                    -- tests/data/*.bin
+                    -- tests/data/*.json
+                    -- tests/data/*.txt
+                    -- tests/data/*.encrypted
+
+source-repository head
+  type:     git
+  location: https://github.com/mchav/dataframe
+
+common warnings
+    ghc-options:
+        -Wall
+
+flag no-csv
+    default:     False
+    manual:      True
+    description: Exclude the CSV reader/writer (@dataframe-csv@). Enable
+                 with @-f +no-csv@ (or @flags: no-csv@ in cabal.project)
+                 to trim the dep set of the meta package when CSV is not
+                 needed.
+
+flag no-parquet
+    default:     False
+    manual:      True
+    description: Exclude the Parquet reader/writer (@dataframe-parquet@
+                 plus pinch, zstd, snappy). Enable with
+                 @-f +no-parquet@. (Reading Parquet from HuggingFace lives
+                 in the separate @dataframe-huggingface@ package, which is
+                 not a dependency of this meta-package.)
+
+flag no-th
+    default:     False
+    manual:      True
+    description: Exclude the Template Haskell splices (@dataframe-th@,
+                 @dataframe-csv-th@, @dataframe-parquet-th@). Enable
+                 with @-f +no-th@ to drop the @template-haskell@ dep for
+                 downstream packages that don't use compile-time schema
+                 derivation.
+
+library
+    import: warnings
+    default-extensions: Strict
+    -- Lock the unused-packages gate locally; haskell-ci already runs the
+    -- same Werror against this stanza. Catches the case where a satellite
+    -- gets added to build-depends but never re-exported.
+    ghc-options: -Werror=unused-packages
+    exposed-modules: DataFrame,
+                    DataFrame.Typed
+    reexported-modules: DataFrame.Functions,
+                        DataFrame.Synthesis,
+                        DataFrame.Display.Web.Plot,
+                        DataFrame.Display.Web.Chart,
+                        DataFrame.Display.Web.Chart.Typed,
+                        DataFrame.Core,
+                        DataFrame.Schema,
+                        DataFrame.Errors,
+                        DataFrame.Operations.Core,
+                        DataFrame.Operations.Join,
+                        DataFrame.Operations.Merge,
+                        DataFrame.Operators,
+                        DataFrame.Operations.Permutation,
+                        DataFrame.Operations.Subset,
+                        DataFrame.Operations.Statistics,
+                        DataFrame.Operations.Transformations,
+                        DataFrame.Operations.Typing,
+                        DataFrame.Operations.Aggregation,
+                        DataFrame.Display,
+                        DataFrame.Display.Terminal.Plot,
+                        DataFrame.Monad,
+                        DataFrame.DecisionTree,
+                        DataFrame.Model,
+                        DataFrame.ModelSelection,
+                        DataFrame.LinearModel,
+                        DataFrame.LinearModel.Regression,
+                        DataFrame.LinearModel.Logistic,
+                        DataFrame.Segmented,
+                        DataFrame.SVM,
+                        DataFrame.KMeans,
+                        DataFrame.PCA,
+                        DataFrame.DBSCAN,
+                        DataFrame.GMM,
+                        DataFrame.Boosting,
+                        DataFrame.Boosting.GBM,
+                        DataFrame.Boosting.AdaBoost,
+                        DataFrame.Metrics,
+                        DataFrame.IO.JSON,
+                        DataFrame.Expr.Serialize,
+                        DataFrame.IR.ExprJson,
+                        DataFrame.Typed.Types,
+                        DataFrame.Typed.Schema,
+                        DataFrame.Typed.Freeze,
+                        DataFrame.Typed.Access,
+                        DataFrame.Typed.Operations,
+                        DataFrame.Typed.Join,
+                        DataFrame.Typed.Aggregate,
+                        DataFrame.Typed.Expr,
+                        DataFrame.Typed.Record,
+                        DataFrame.Typed.Generic
+    build-depends:    base >= 4 && <5,
+                      dataframe-core >= 2.2 && < 2.3,
+                      dataframe-json >= 1.2.0.1 && < 1.3,
+                      dataframe-expr-serializer >= 1.2.0.1 && < 1.3,
+                      dataframe-operations >= 2.2 && < 2.4,
+                      dataframe-parsing >= 2.2 && < 2.3,
+                      dataframe-viz >= 1.3 && < 1.4,
+                      dataframe-learn >= 2.2 && < 2.3
+
+    if !flag(no-csv)
+        reexported-modules: DataFrame.IO.CSV,
+                            DataFrame.Typed.IO.CSV
+        build-depends:   dataframe-csv >= 2.3 && < 2.4
+        cpp-options:     -DWITH_CSV
+
+    if !flag(no-parquet)
+        reexported-modules: DataFrame.IO.Parquet,
+                            DataFrame.IO.Parquet.Binary,
+                            DataFrame.IO.Parquet.Dictionary,
+                            DataFrame.IO.Parquet.Levels,
+                            DataFrame.IO.Parquet.Thrift,
+                            DataFrame.IO.Parquet.Decompress,
+                            DataFrame.IO.Parquet.Encoding,
+                            DataFrame.IO.Parquet.Page,
+                            DataFrame.IO.Parquet.Schema,
+                            DataFrame.IO.Parquet.Utils,
+                            DataFrame.IO.Parquet.Seeking,
+                            DataFrame.IO.Parquet.Time,
+                            DataFrame.IO.Utils.RandomAccess,
+                            DataFrame.Typed.IO.Parquet
+        build-depends:   dataframe-parquet >= 1.5 && < 1.6
+        cpp-options:     -DWITH_PARQUET
+
+    -- The lazy executor calls both CSV and Parquet readers directly, so
+    -- it can only be pulled in when both backends are present.
+    if !flag(no-csv) && !flag(no-parquet)
+        reexported-modules: DataFrame.Lazy,
+                            DataFrame.Lazy.IO.Binary,
+                            DataFrame.Lazy.IO.CSV,
+                            DataFrame.Typed.Lazy
+        build-depends:   dataframe-lazy >= 2.3 && < 2.4
+        cpp-options:     -DWITH_LAZY
+
+    if !flag(no-th)
+        build-depends:   dataframe-th >= 2.2 && < 2.3
+        cpp-options:     -DWITH_TH
+        exposed-modules: DataFrame.TH,
+                         DataFrame.Typed.TH
+
+    if !flag(no-th) && !flag(no-csv)
+        build-depends:   dataframe-csv-th >= 1.3 && < 1.4
+        cpp-options:     -DWITH_CSV_TH
+
+    if !flag(no-th) && !flag(no-parquet)
+        build-depends:   dataframe-parquet-th >= 1.3 && < 1.4
+        cpp-options:     -DWITH_PARQUET_TH
+
+    hs-source-dirs:   src
+    default-language: Haskell2010
+
+library arrow-bridge
+    import: warnings
+    visibility: public
+    hs-source-dirs:   ffi
+    exposed-modules:  DataFrame.IO.Arrow
+                      DataFrame.IR
+    -- The expr/pipeline JSON codec now lives in its own lightweight package;
+    -- re-export it so the Python FFI and Haskell consumers keep importing
+    -- @DataFrame.IR.ExprJson@ unchanged.
+    reexported-modules: DataFrame.IR.ExprJson
+    -- The Arrow bridge IR loads CSV + Parquet readers, so it requires
+    -- both backends. If either flag is off, skip building it.
+    if flag(no-csv) || flag(no-parquet)
+        buildable: False
+    build-depends:
+        base        >= 4   && < 5,
+        dataframe-core >= 2.2 && < 2.3,
+        dataframe-expr-serializer >= 1.2.0.1 && < 1.3,
+        dataframe-csv >= 2.3 && < 2.4,
+        dataframe-json >= 1.2.0.1 && < 1.3,
+        dataframe-lazy >= 2.3 && < 2.4,
+        dataframe-operations >= 2.2 && < 2.3,
+        dataframe-parquet >= 1.5 && < 1.6,
+        dataframe-parsing >= 2.2 && < 2.3,
+        text        >= 2.1 && < 3,
+        aeson       >= 0.11 && < 3,
+        bytestring  >= 0.11 && < 0.14,
+        containers  >= 0.6.7 && < 0.10,
+        vector      >= 0.13 && < 0.15
+    include-dirs:     cbits
+    default-language: Haskell2010
+
+executable dataframe-benchmark-example
+    import: warnings
+    main-is: Benchmark.hs
+    build-depends:    base >= 4 && < 5,
+                      dataframe >= 3.3 && < 3.4,
+                      dataframe-operations >= 2.2 && < 2.3,
+                      random >= 1 && < 2,
+                      time >= 1.12 && < 2,
+                      vector >= 0.13 && < 0.15,
+    hs-source-dirs:   app
+    default-language: Haskell2010
+    ghc-options: -rtsopts -threaded -with-rtsopts=-N
+
+executable synthesis
+    import: warnings
+    main-is: Synthesis.hs
+    build-depends:    base >= 4 && < 5,
+                      dataframe >= 3.3 && < 3.4,
+                      dataframe-core >= 2.2 && < 2.3,
+                      dataframe-learn >= 2.2 && < 2.3,
+                      dataframe-operations >= 2.2 && < 2.3,
+                      random >= 1 && < 2,
+                      text >= 2.1 && < 3
+    hs-source-dirs:   app
+    default-language: Haskell2010
+    ghc-options: -rtsopts -threaded -with-rtsopts=-N
+
+executable dataframe
+    import: warnings
+    main-is: Main.hs
+    build-depends:    base >= 4 && < 5,
+                      directory >= 1.3.0.0 && < 2,
+                      filepath >= 1.4 && < 2,
+                      process >= 1.6 && < 2,
+                      time >= 1.12 && < 2
+    if !os(windows)
+        build-depends: unix >= 2 && < 3
+    hs-source-dirs:   app
+    default-language: Haskell2010
+    ghc-options: -rtsopts -threaded -with-rtsopts=-N
+
+executable lazy-bench
+    import: warnings
+    main-is: LazyBenchmark.hs
+    -- lazy-bench drives the lazy executor against CSV/Parquet sources, so
+    -- it can only build when both backends are present.
+    if flag(no-csv) || flag(no-parquet)
+        buildable: False
+    build-depends:    base >= 4 && < 5,
+                      bytestring >= 0.11 && < 0.14,
+                      containers >= 0.6.7 && < 0.10,
+                      dataframe >= 3.3 && < 3.4,
+                      dataframe-core >= 2.2 && < 2.3,
+                      dataframe-lazy >= 2.3 && < 2.4,
+                      dataframe-parsing >= 2.2 && < 2.3,
+                      directory >= 1.3.0.0 && < 2,
+                      random >= 1 && < 2,
+                      text >= 2.1 && < 3,
+                      time >= 1.12 && < 2,
+    hs-source-dirs:   app
+    default-language: Haskell2010
+    ghc-options: -rtsopts -threaded -with-rtsopts=-N
+
+benchmark dataframe-benchmark
+    import: warnings
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    hs-source-dirs: benchmark
+    build-depends: base >= 4 && < 5,
+                   criterion >= 1 && < 2,
+                   deepseq >= 1.4 && < 2,
+                   process >= 1.6 && < 2,
+                   dataframe >= 3.3 && < 3.4,
+                   dataframe-core >= 2.2 && < 2.3,
+                   dataframe-operations >= 2.2 && < 2.3,
+                   random >= 1 && < 2,
+    default-language: Haskell2010
+    ghc-options:
+      -threaded
+      -rtsopts
+      -with-rtsopts=-N
+
+test-suite tests
+    import: warnings
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    -- Threaded RTS with -N so the parallel-grouping parity test exercises the
+    -- real multi-capability fork path rather than the sequential fallback.
+    ghc-options: -threaded -rtsopts -with-rtsopts=-N
+    -- The test runner imports CSV, JSON, Parquet, Lazy, and TH-derived
+    -- schema modules. All features must be enabled for it to compile.
+    if flag(no-csv) || flag(no-parquet) || flag(no-th)
+        buildable: False
+    other-modules: Assertions,
+                   Functions,
+                   GenDataFrame,
+                   Internal.ColumnBuilder,
+                   Internal.DictEncode,
+                   Internal.Markdown,
+                   Internal.PackedText,
+                   Internal.Parsing,
+                   PackedTextMigration,
+                   PrettyPrint,
+                   Learn.Denotation,
+                   Learn.Models,
+                   Learn.TypedModel,
+                   Learn.Segmented,
+                   Learn.Ensembles,
+                   Learn.SklearnParity,
+                   Learn.Synthesis,
+                   Learn.MetricsTests,
+                   Learn.Metamorphic,
+                   IO.CSV,
+                   IO.CsvGolden,
+                   IO.JSON,
+                   IR.ExprJsonRoundtrip,
+                   Operations.Aggregations,
+                   Operations.Apply,
+                   Operations.Core,
+                   Operations.Derive,
+                   Operations.Filter,
+                   Operations.GroupBy,
+                   Operations.ParallelGroupBy,
+                   Operations.ParallelJoin,
+                   Operations.Inference,
+                   Operations.InsertColumn,
+                   Operations.Join,
+                   Operations.Merge,
+                   Operations.Nullable,
+                   Operations.NullableHashing,
+                   Operations.Provenance,
+                   Operations.ReadCsv,
+                   Operations.Window,
+                   Operations.WriteCsv,
+                   Operations.Shuffle,
+                   Operations.Sort,
+                   Operations.SetOps,
+                   Operations.Subset,
+                   Operations.Statistics,
+                   Operations.Take,
+                   Operations.Typing,
+                   Operations.VectorKernel,
+                   Operations.Record,
+                   LazyParquet,
+                   LazyParity,
+                   LazyProjection,
+                   Parquet,
+                   ParquetTestData,
+                   Plotting,
+                   Properties,
+                   Properties.Categorical,
+                   Simplify,
+                   Typed.Parity,
+                   Typed.IOReaders,
+                   Monad
+    build-depends:  base >= 4 && < 5,
+                    aeson >= 0.11.0.0 && < 3,
+                    bytestring >= 0.11 && < 0.14,
+                    dataframe >= 3.3 && < 3.4,
+                    dataframe-core >= 2.2 && < 2.3,
+                    dataframe-core >= 2.2 && < 2.3,
+                    dataframe-csv >= 2.3 && < 2.4,
+                    dataframe-expr-serializer >= 1.2.0.1 && < 1.3,
+                    dataframe-fastcsv >= 1.4.0.1 && < 1.5,
+                    dataframe-json >= 1.2.0.1 && < 1.3,
+                    dataframe-lazy >= 2.3 && < 2.4,
+                    dataframe-learn >= 2.2 && < 2.3,
+                    dataframe-operations >= 2.2 && < 2.3,
+                    dataframe-parquet >= 1.5 && < 1.6,
+                    dataframe-parsing >= 2.2 && < 2.3,
+                    HUnit >= 1.6 && < 1.8,
+                    QuickCheck >= 2 && < 3,
+                    random-shuffle >= 0.0.4 && < 1,
+                    random >= 1 && < 2,
+                    text >= 2.1 && < 3,
+                    time >= 1.12 && < 2,
+                    vector >= 0.13 && < 0.15,
+                    temporary >= 1.3 && < 1.5,
+                    directory >= 1.3 && < 1.4,
+                    containers >= 0.6.7 && < 0.10
+    hs-source-dirs: tests
+    default-language: Haskell2010
+
+-- Focused oracle for the packed-text column variant. Kept as its own suite so
+-- it can run independently of the (heavier) `tests` runner.
+test-suite packed-text
+    import: warnings
+    type: exitcode-stdio-1.0
+    main-is: PackedTextMain.hs
+    if flag(no-csv) || flag(no-parquet) || flag(no-th)
+        buildable: False
+    other-modules: Internal.PackedText
+    build-depends:  base >= 4 && < 5,
+                    bytestring >= 0.11 && < 0.14,
+                    dataframe >= 3.3 && < 3.4,
+                    dataframe-core >= 2.2 && < 2.3,
+                    dataframe-operations >= 2.2 && < 2.3,
+                    HUnit >= 1.6 && < 1.8,
+                    text >= 2.1 && < 3,
+                    vector >= 0.13 && < 0.15
+    hs-source-dirs: tests
+    default-language: Haskell2010