packages feed

yaya-0.6.2.2: yaya.cabal

cabal-version: 3.0

name: yaya
version: 0.6.2.2
synopsis: Total recursion schemes.
description: Recursion schemes allow you to separate recursion from your
             business logic – making your own operations simpler, more modular,
             and less error-prone. This library also provides tools for
             combining your operations in ways that reduce the number of passes
             over your data and is designed to encourage total (i.e.,
             successfully terminating) functions.
author: Greg Pfeil <greg@technomadic.org>
maintainer: Greg Pfeil <greg@technomadic.org>
copyright: 2017 Greg Pfeil
homepage: https://github.com/sellout/yaya#readme
bug-reports: https://github.com/sellout/yaya/issues
category: Recursion
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.6.1,
    8.8.1,
    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.8.1,
    9.10.1
  }

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

-- 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 -- uncomment if the oldest supported version is GHC 8.10.1+
    DeriveTraversable
    DerivingStrategies
    DisambiguateRecordFields
    DoAndIfThenElse
    EmptyCase
    ExistentialQuantification
    FlexibleContexts
    FlexibleInstances
    GADTs
    GeneralizedNewtypeDeriving
    HexFloatLiterals
    -- ImportQualifiedPost -- uncomment if the oldest supported version is GHC 8.10.1+
    InstanceSigs
    LambdaCase
    MagicHash
    MonadComprehensions
    MonomorphismRestriction
    MultiParamTypeClasses
    NamedFieldPuns
    NamedWildCards
    NumericUnderscores
    PolyKinds
    PostfixOperators
    RankNTypes
    RoleAnnotations
    ScopedTypeVariables
    StandaloneDeriving
    -- StandaloneKindSignatures -- uncomment if the oldest supported version is GHC 8.10.1+
    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.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},
  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
  if impl(ghc < 8.8.1)
    ghc-options:
      -- This used to warn even when `Safe` was explicit.
      -Wno-safe
  if impl(ghc >= 8.10.1)
    ghc-options:
      -- If we didn’t allow inferred-safe imports, nothing would be `Safe`.
      -Wno-inferred-safe-imports
      -- We support GHC versions without qualified-post.
      -Wno-prepositive-qualified-module
  if impl(ghc >= 9.2.1)
    ghc-options:
      -- We support GHC versions without kind signatures.
      -Wno-missing-kind-signatures
  if impl(ghc >= 9.8.1)
    ghc-options:
      -- We support GHC versions without kind signatures.
      -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.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:
    comonad ^>= 5.0.7,
    either ^>= 5,
    free ^>= {5.1.5, 5.2},
    kan-extensions ^>= 5.2,
    -- `Control.Lens` in lens < 5 is `Unsafe`
    lens ^>= {5, 5.1, 5.2, 5.3},
    profunctors ^>= {5.5.2, 5.6},
    -- strict < 0.4 doesn’t export various combinators
    strict ^>= {0.4, 0.5},
    template-haskell ^>= {2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.19.0, 2.20.0, 2.21.0, 2.22.0},
    -- th-abstraction < 0.3 has different field names
    th-abstraction ^>= {0.4.1, 0.5.0, 0.6.0, 0.7.0},
    transformers ^>= {0.5.5, 0.6.1},
  exposed-modules:
    Yaya.Applied
    Yaya.Experimental.Foldable
    Yaya.Fold
    Yaya.Fold.Common
    Yaya.Fold.Native
    Yaya.Functor
    Yaya.Pattern
    Yaya.Retrofit
    Yaya.Zoo
  other-modules:
    Yaya.Fold.Native.Internal

test-suite doctests
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: tests
  main-is: doctests.hs
  build-depends:
    doctest ^>= {0.16.0, 0.18.1, 0.20.1, 0.21.1, 0.22.2},
    yaya,
  if impl(ghc >= 8.10.1)
    ghc-options:
      -- `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
  -- 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-export-lists
    -Wno-missing-import-lists
    -Wno-safe
  if impl(ghc >= 8.8.1)
    ghc-options:
      -Wno-missing-deriving-strategies
  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