packages feed

yaya-0.5.2.1: yaya.cabal

cabal-version:  3.0

name:        yaya
version:     0.5.2.1
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-source-files:
  CHANGELOG.md
  README.md
tested-with:
  GHC == {
--  GHCup   Nixpkgs
    8.6.1,
    8.8.1,  8.8.4,
    8.10.1,
    9.0.1,
    9.2.1,
    9.4.1,  9.4.8,
    9.6.1,
            9.8.1
  }

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

-- This mimics the GHC2021 extension
-- (https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html?highlight=doandifthenelse#extension-GHC2021),
-- but supporting compilers back to GHC 7.10. If the oldest supported compiler
-- is GHC 9.2, then this stanza can be removed and `import: GHC2021` can be
-- replaced by `default-language: GHC2021`.
common GHC2021
  default-language: Haskell2010
  default-extensions:
    BangPatterns
    BinaryLiterals
    ConstraintKinds
    DeriveDataTypeable
    DeriveGeneric
    -- DeriveLift -- uncomment if the oldest supported version is GHC 8.10.1+
    DeriveTraversable
    DerivingStrategies
    DoAndIfThenElse
    EmptyCase
    ExistentialQuantification
    FlexibleContexts
    FlexibleInstances
    GADTSyntax
    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
    ScopedTypeVariables
    StandaloneDeriving
    -- StandaloneKindSignatures -- uncomment if the oldest supported version is GHC 8.10.1+
    TupleSections
    TypeApplications
    TypeOperators
    UnicodeSyntax
    NoExplicitNamespaces

common defaults
  import: GHC2021
  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},
  ghc-options:
    -Weverything
    -- 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
    -- TODO: prune these warnings
    -Wno-all-missed-specialisations
    -fpackage-trust
    -trust base
  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
      -- `-trust` triggers this warning when applied to transitive dependencies.
      -Wno-unused-packages
  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:
    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+
    RoleAnnotations
    StrictData
    TemplateHaskellQuotes
    TransformListComp
    NoGeneralizedNewtypeDeriving
    NoImplicitPrelude
    NoMonomorphismRestriction
    NoPatternGuards
    NoTypeApplications

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},
    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},
    cabal-doctest ^>= 1.0.0

library
  import: defaults
  hs-source-dirs: src
  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
  build-depends:
    comonad,
    either,
    free,
    kan-extensions,
    lens,
    profunctors,
    strict,
    template-haskell,
    th-abstraction,
    transformers,
  ghc-options:
    -trust adjunctions
    -trust array
    -trust base-orphans
    -trust binary
    -trust bytestring
    -trust containers
    -trust distributive
    -trust exceptions
    -trust ghc-prim
    -trust lens
    -trust profunctors
    -trust semigroupoids
    -trust stm
    -trust template-haskell
    -trust text
    -trust transformers-compat
  if impl(ghc < 9.6)
    ghc-options:
      -trust foldable1-classes-compat

test-suite doctests
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: tests
  main-is: doctests.hs
  build-depends:
    doctest ^>= {0.15.0, 0.16.0, 0.17.0, 0.18.0, 0.19.0, 0.20.0, 0.21.0, 0.22.0},
    yaya,
  -- 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:
      -- This used to warn even when `Safe` was explicit.
      -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