packages feed

large-records-0.4: large-records.cabal

cabal-version:      2.4
name:               large-records
version:            0.4
synopsis:           Efficient compilation for large records, linear in the size of the record
description:        For many reasons, the internal code generated for modules
                    that contain records is quadratic in the number of record
                    fields. For large records (more than 30 fields, say), this
                    can become problematic, leading to large compilation times
                    and high memory requirements for ghc. The large-records
                    library provides a way to define records that is guaranteed
                    to result in ghc core that is /linear/ in the number of
                    record fields.
bug-reports:        https://github.com/well-typed/large-records/issues
license:            BSD-3-Clause
author:             Edsko de Vries
maintainer:         edsko@well-typed.com
category:           Generics
extra-source-files: CHANGELOG.md
tested-with:        GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.7 || ==9.4.4

source-repository head
  type:     git
  location: https://github.com/well-typed/large-records

library
  exposed-modules:

      Data.Record.Plugin
      Data.Record.Plugin.Options
      Data.Record.Plugin.Runtime
      Data.Record.Plugin.WithRDP
      Data.Record.Overloading

  other-modules:

      Data.Record.Internal.GHC.Fresh
      Data.Record.Internal.GHC.Shim
      Data.Record.Internal.GHC.TemplateHaskellStyle

      Data.Record.Internal.Plugin.CodeGen
      Data.Record.Internal.Plugin.Exception
      Data.Record.Internal.Plugin.Names
      Data.Record.Internal.Plugin.Options
      Data.Record.Internal.Plugin.Record

  build-depends:
      base            >= 4.13   && < 4.18
    , containers      >= 0.6.2  && < 0.7
    , mtl             >= 2.2.1  && < 2.3
    , primitive       >= 0.7    && < 0.8
    , syb             >= 0.7    && < 0.8
    , record-hasfield >= 1.0    && < 1.1

      -- large-generics 0.2 starts using 'SmallArray' instead of 'Vector'
    , large-generics >= 0.2 && < 0.3

      -- transformers 0.5.6 introduces Writer.CPS
    , transformers >= 0.5.6 && < 0.7

      -- 0.2.16 introduces support for ghc 9.4
    , record-dot-preprocessor >= 0.2.16 && < 0.3

      -- whatever versions are bundled with ghc
    , ghc
    , template-haskell
  hs-source-dirs:
      src
  default-language:
      Haskell2010
  default-extensions:
      NoStarIsType
  ghc-options:
      -Wall
      -Wcompat
      -Wincomplete-uni-patterns
      -Wincomplete-record-updates
      -Wpartial-fields
      -Widentities
      -Wredundant-constraints
      -Wmissing-export-lists

  if impl(ghc >= 8.10)
    ghc-options: -Wunused-packages

test-suite test-large-records
  type:
      exitcode-stdio-1.0
  main-is:
      TestLargeRecords.hs
  other-modules:
      Test.Record.Sanity.CodeGen
      Test.Record.Sanity.Derive
      Test.Record.Sanity.EqualFieldTypes
      Test.Record.Sanity.GhcGenerics
      Test.Record.Sanity.HigherKinded
      Test.Record.Sanity.HKD
      Test.Record.Sanity.NamedWildCards
      Test.Record.Sanity.Operators
      Test.Record.Sanity.OverloadedRecordUpdate
      Test.Record.Sanity.OverloadingNoDRF
      Test.Record.Sanity.PatternMatch
      Test.Record.Sanity.QualifiedImports
      Test.Record.Sanity.QualifiedImports.A
      Test.Record.Sanity.QualifiedImports.B
      Test.Record.Sanity.RDP.SingleModule
      Test.Record.Sanity.RDP.SplitModule
      Test.Record.Sanity.RDP.SplitModule.RecordDef
      Test.Record.Sanity.RecordConstruction
      Test.Record.Sanity.Strictness
      Test.Record.Sanity.StrictnessStrictData
      Test.Record.Util

  build-depends:
      base
    , large-records

    , generic-deriving
    , large-generics
    , mtl
    , newtype
    , record-dot-preprocessor
    , record-hasfield
    , tasty
    , tasty-hunit
    , template-haskell
    , transformers
  hs-source-dirs:
      test
  default-language:
      Haskell2010
  ghc-options:
      -Wall
      -Wcompat
      -Wincomplete-uni-patterns
      -Wincomplete-record-updates
      -Wpartial-fields
      -Widentities