packages feed

dualizer-0.2.0.0: dualizer.cabal

cabal-version: 3.0

name: dualizer
version: 0.2.0.0
synopsis: Automatically generate dual constructions
description: A library for defining duals automatically, as well as labeling duals in existing packages.
author: Greg Pfeil <greg@technomadic.org>
maintainer: Greg Pfeil <greg@technomadic.org>
copyright: 2017-2024 Greg Pfeil
homepage: https://github.com/sellout/dualizer#readme
bug-reports: https://github.com/sellout/dualizer/issues
category: Categories
build-type: Custom
license: AGPL-3.0-or-later
license-files:
  LICENSE
extra-doc-files:
  CHANGELOG.md
  README.md
  docs/*.md
tested-with:
  GHC == {
    8.10.1, 8.10.7,
    9.0.1, 9.0.2,
    9.2.1, 9.2.5,
    9.4.1, 9.4.5,
    9.6.1, 9.6.3, 9.6.6,
    9.8.1,
    9.10.1
  }

source-repository head
  type: git
  location: https://github.com/sellout/dualizer

-- This mimics the GHC2024 extension
-- (https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html?highlight=doandifthenelse#extension-GHC2024),
-- but supporting compilers back to GHC 7.10. If the oldest supported compiler
-- is GHC 9.10, then this stanza can be removed and `import: GHC2024` can be
-- replaced by `default-language: GHC2024`. If the oldest supported compiler is
-- GHC 9.2, then this can be simplified by setting `default-language: GHC2021`
-- and only including the extensions added by GHC2024.
common GHC2024
  default-language: Haskell2010
  default-extensions:
    BangPatterns
    BinaryLiterals
    ConstraintKinds
    DataKinds
    DeriveDataTypeable
    DeriveGeneric
    DeriveLift
    DeriveTraversable
    DerivingStrategies
    DisambiguateRecordFields
    DoAndIfThenElse
    EmptyCase
    ExistentialQuantification
    FlexibleContexts
    FlexibleInstances
    GADTs
    GeneralizedNewtypeDeriving
    HexFloatLiterals
    ImportQualifiedPost
    InstanceSigs
    LambdaCase
    MagicHash
    MonadComprehensions
    MonomorphismRestriction
    MultiParamTypeClasses
    NamedFieldPuns
    NamedWildCards
    NumericUnderscores
    PolyKinds
    PostfixOperators
    RankNTypes
    RoleAnnotations
    ScopedTypeVariables
    StandaloneDeriving
    StandaloneKindSignatures
    TupleSections
    TypeApplications
    TypeOperators
    UnicodeSyntax

flag noisy-deprecations
  description:
    Prior to GHC 9.10, the `DEPRECATED` pragma can’t distinguish between terms
    and types. Consenquently, you can get spurious warnings when there’s a name
    collision and the name in the other namespace is deprecated. Or you can
    choose to not get those warnings, at the risk of not being warned when
    there’s a name collision and the namespace you’re referencing is the one
    that’s deprecated.

common defaults
  import: GHC2024
  build-depends:
    base ^>= {4.14.0, 4.15.0, 4.16.0, 4.17.0, 4.18.0, 4.19.0, 4.20.0},
  ghc-options:
    -Weverything
    -- This one just reports unfixable things, AFAICT.
    -Wno-all-missed-specialisations
    -- Type inference good.
    -Wno-missing-local-signatures
    -- Warns even when `Unsafe` is explicit, not inferred. See
    -- https://gitlab.haskell.org/ghc/ghc/-/issues/16689
    -Wno-unsafe
  -- remove if the oldest supported version is GHC 9.2.1+
  if impl(ghc >= 9.2.1)
    ghc-options:
      -Wno-missing-kind-signatures
  if impl(ghc >= 9.8.1)
    ghc-options:
      -- remove if the oldest supported version is GHC 9.2.1+
      -Wno-missing-poly-kind-signatures
      -- Inference good.
      -Wno-missing-role-annotations
  default-extensions:
    BlockArguments
    DefaultSignatures
    ExplicitNamespaces
    FunctionalDependencies
    LiberalTypeSynonyms
    -- replace with `LexicalNegation` if the oldest supported version is GHC 9.0.1+
    NegativeLiterals
    PackageImports
    ParallelListComp
    -- QualifiedDo - uncomment if the oldest supported version is GHC 9.0.1+
    RecursiveDo
    -- RequiredTypeArguments - uncomment if the oldest supported version is GHC 9.10.1+
    StrictData
    TemplateHaskellQuotes
    TransformListComp
    NoGeneralizedNewtypeDeriving
    NoImplicitPrelude
    NoMonomorphismRestriction
    NoPatternGuards
    NoStarIsType
    NoTypeApplications
  if flag(noisy-deprecations)
    cpp-options: -DSELLOUT_NOISY_DEPRECATIONS

custom-setup
  setup-depends:
    -- TODO: Remove `Cabal` dep once haskell/cabal#3751 is fixed.
    Cabal ^>= {3.0.0, 3.2.0, 3.4.0, 3.6.0, 3.8.0, 3.10.0, 3.12.0},
    base ^>= {4.8.2, 4.9.0, 4.10.0, 4.11.0, 4.12.0, 4.13.0, 4.14.0, 4.15.0, 4.16.0, 4.17.0, 4.18.0, 4.19.0, 4.20.0},
    cabal-doctest ^>= {1.0.0},

library
  import: defaults
  hs-source-dirs: src
  build-depends:
    containers ^>= {0.6.2, 0.7},
    lens ^>= {4.19, 5, 5.1, 5.2, 5.3},
    template-haskell ^>= {2.16.0, 2.17.0, 2.18.0, 2.19.0, 2.20.0, 2.21.0, 2.22.0},
    transformers ^>= {0.5.6, 0.6.1},
  exposed-modules:
    Categorical.Dual
    Categorical.Dual.Base
    Categorical.Dual.Example
    Categorical.Dual.Lens
    Categorical.Dual.Prelude

test-suite doctests
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: tests
  main-is: doctests.hs
  build-depends:
    doctest ^>= {0.16.3, 0.18.1, 0.20.1, 0.21.1, 0.22.2},
    dualizer,
  -- TODO: The sections below here are necessary because we don’t have control
  --       over the generated `Build_doctests.hs` file. So we have to silence
  --       all of its warnings one way or another.
  ghc-options:
    -Wno-missing-deriving-strategies
    -Wno-missing-export-lists
    -Wno-missing-import-lists
    -Wno-safe
    -- `doctest` requires the package containing the doctests as a dependency
    -- to ensure it gets built before this test-suite, even though the package
    -- appears to be unused.
    -Wno-unused-packages
  default-extensions:
    -- Since we can’t add `{-# LANGUAGE Safe -#}` to the generated
    -- “Build_doctests.hs”, we set it here, and that means it has to match
    -- doctests.hs, which is `Unsafe`.
    Unsafe