packages feed

ghc-typelits-extra-0.5.2: ghc-typelits-extra.cabal

cabal-version:       3.0
name:                ghc-typelits-extra
version:             0.5.2
synopsis:            Additional type-level operations on GHC.TypeLits.Nat
description:
  Additional type-level operations on @GHC.TypeLits.Nat@:

  * @Max@: type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:max max>

  * @Min@: type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:min min>

  * @Div@: type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:div div>

  * @Mod@: type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:mod mod>

  * @FLog@: type-level equivalent of <https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
    i.e. the exact integer equivalent to @floor (logBase x y)@

  * @CLog@: type-level equivalent of /the ceiling of/ <https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
    i.e. the exact integer equivalent to @ceiling (logBase x y)@

  * @CLogWZ@: extension of @CLog@, which returns the additional third argument in case the second argument is zero

  * @Log@: type-level equivalent of <https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
     where the operation only reduces when @floor (logBase b x) ~ ceiling (logBase b x)@

  * @GCD@: a type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:gcd gcd>

  * @LCM@: a type-level <http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:lcm lcm>

  And a custom solver for the above operations defined in
  @GHC.TypeLits.Extra.Solver@ as a GHC type-checker plugin. To use the plugin,
  add the

  @
  OPTIONS_GHC -fplugin GHC.TypeLits.Extra.Solver
  @

  pragma to the header of your file.
homepage:            http://www.clash-lang.org/
bug-reports:         http://github.com/clash-lang/ghc-typelits-extra/issues
license:             BSD-2-Clause
license-file:        LICENSE
author:              Christiaan Baaij
maintainer:          christiaan.baaij@gmail.com
copyright:           Copyright © 2015-2016, University of Twente,
                                 2017-2018, QBayLogic B.V.
category:            Type System
build-type:          Simple
extra-source-files:  README.md
                     CHANGELOG.md
tested-with:         GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8,
                     GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.3,
                     GHC == 9.12.2


source-repository head
  type: git
  location: https://github.com/clash-lang/ghc-typelits-extra.git

flag deverror
  description:
    Enables `-Werror` for development mode and TravisCI
  default: False
  manual: True

library
  exposed-modules:     GHC.TypeLits.Extra,
                       GHC.TypeLits.Extra.Solver
  other-modules:       GHC.TypeLits.Extra.Solver.Compat
                       GHC.TypeLits.Extra.Solver.Unify
                       GHC.TypeLits.Extra.Solver.Operations
  build-depends:       base                      >= 4.8      && <5,
                       containers                >= 0.5.7.1  && <0.9,
                       ghc                       >= 8.8      && <9.17,
                       ghc-prim                  >= 0.5      && <1.0,
                       ghc-tcplugin-api          >= 0.18.1.0 && <0.19,
                       ghc-typelits-knownnat     >= 0.7.2    && <0.9,
                       ghc-typelits-natnormalise >= 0.9.3    && <0.10,
                       transformers              >= 0.4.2.0  && <0.7,
                       template-haskell          >= 2.15     && <2.25
  if impl(ghc >= 9.0.0)
    build-depends:     ghc-bignum >=1.0 && <1.5
  else
    build-depends:     integer-gmp >=1.0 && <1.1
    mixins:
      ghc
        ( TcTypeNats   as GHC.Builtin.Types.Literals
        , DataCon      as GHC.Core.DataCon
        , TyCoRep      as GHC.Core.TyCo.Rep
        , Type         as GHC.Core.Type
        , Plugins      as GHC.Driver.Plugins
        )

    if impl(ghc >= 8.9)
      mixins:
        ghc
          ( Constraint as GHC.Tc.Types.Constraint
          )
    else
      mixins:
        ghc
          ( TcRnTypes as GHC.Tc.Types.Constraint
          )

  hs-source-dirs:      src
  default-language:    Haskell2010
  other-extensions:    DataKinds
                       FlexibleInstances
                       GADTs
                       MagicHash
                       MultiParamTypeClasses
                       ScopedTypeVariables
                       TemplateHaskell
                       TupleSections
                       TypeApplications
                       TypeFamilies
                       TypeOperators
                       UndecidableInstances
  if flag(deverror)
    ghc-options:         -Wall -Werror
  else
    ghc-options:         -Wall

test-suite test-ghc-typelits-extra
  type:                exitcode-stdio-1.0
  main-is:             Main.hs
  Other-Modules:       ErrorTests
  build-depends:       base                      >= 4.8 && <5,
                       ghc-typelits-extra,
                       ghc-typelits-knownnat     >= 0.8.2,
                       ghc-typelits-natnormalise >= 0.9.0,
                       tasty                     >= 0.10,
                       tasty-hunit               >= 0.9
  hs-source-dirs:      tests
  default-language:    Haskell2010
  other-extensions:    DataKinds
                       TypeOperators
  if flag(deverror)
    ghc-options:       -dcore-lint