packages feed

typelet-0.1.0.0: typelet.cabal

cabal-version:      2.4
build-type:         Custom
name:               typelet
version:            0.1.0.0
synopsis:           Plugin to faciliate type-level let
description:        For a certain class of programs, type-level let is essential
                    in order to be able to write these programs in such a way
                    that they do not result in ghc core that is quadratic in
                    size. Type-level let is not explicitly supported in ghc,
                    but we can encode it. The @typelet@ library provides a
                    type-checker plugin that makes the encoding more convenient
                    to use as well as more effective.
bug-reports:        https://github.com/well-typed/typelet/issues
license:            BSD-3-Clause
author:             Edsko de Vries
maintainer:         edsko@well-typed.com
copyright:          Well-Typed LLP, Juspay Technologies Pvt Ltd
category:           Plugin
extra-source-files: CHANGELOG.md

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

custom-setup
    setup-depends:
        base >= 4 && <5
      , cabal-doctest >= 1 && <1.1

library
    exposed-modules:
        TypeLet
        TypeLet.UserAPI
        TypeLet.Plugin
    other-modules:
        TypeLet.Plugin.Constraints
        TypeLet.Plugin.GhcTcPluginAPI
        TypeLet.Plugin.NameResolution
        TypeLet.Plugin.Substitution
    build-depends:
        base >= 4.13 && < 4.17
      , ghc-tcplugin-api >= 0.6 && < 0.7

        -- whichever versions are bundled with ghc:
      , containers
      , ghc
    hs-source-dirs:
        src
    default-language:
        Haskell2010
    default-extensions:
        DataKinds
        DeriveFunctor
        FlexibleInstances
        GADTs
        KindSignatures
        LambdaCase
        MultiParamTypeClasses
        PolyKinds
        RankNTypes
        RecordWildCards
        ScopedTypeVariables
        TupleSections
    other-extensions:
        CPP
    ghc-options:
        -Wall

test-suite test-typelet
    default-language:
        Haskell2010
    default-extensions:
        DataKinds
        FlexibleContexts
        FlexibleInstances
        GADTs
        KindSignatures
        MultiParamTypeClasses
        PolyKinds
        RankNTypes
        ScopedTypeVariables
        StandaloneDeriving
        TypeApplications
        TypeFamilies
        TypeOperators
        UndecidableInstances
    type:
        exitcode-stdio-1.0
    hs-source-dirs:
        test
    main-is:
        TestTypeLet.hs
    other-modules:
        Test.Infra
        Test.Sanity
        Test.WithoutPlugin

    if flag(include-size-tests)
      -- Currently the size tests are built, but not actually part of the test
      -- suite proper. We are just interested in the size of their core.
      other-modules:
          Test.Size.Ap.Baseline.Baseline010
          Test.Size.Ap.Baseline.Baseline020
          Test.Size.Ap.Baseline.Baseline030
          Test.Size.Ap.Baseline.Baseline040
          Test.Size.Ap.Baseline.Baseline050
          Test.Size.Ap.Baseline.Baseline060
          Test.Size.Ap.Baseline.Baseline070
          Test.Size.Ap.Baseline.Baseline080
          Test.Size.Ap.Baseline.Baseline090
          Test.Size.Ap.Baseline.Baseline100
          Test.Size.Ap.Index.Ix010
          Test.Size.Ap.Index.Ix020
          Test.Size.Ap.Index.Ix030
          Test.Size.Ap.Index.Ix040
          Test.Size.Ap.Index.Ix050
          Test.Size.Ap.Index.Ix060
          Test.Size.Ap.Index.Ix070
          Test.Size.Ap.Index.Ix080
          Test.Size.Ap.Index.Ix090
          Test.Size.Ap.Index.Ix100
          Test.Size.Ap.Let.Let010
          Test.Size.Ap.Let.Let020
          Test.Size.Ap.Let.Let030
          Test.Size.Ap.Let.Let040
          Test.Size.Ap.Let.Let050
          Test.Size.Ap.Let.Let060
          Test.Size.Ap.Let.Let070
          Test.Size.Ap.Let.Let080
          Test.Size.Ap.Let.Let090
          Test.Size.Ap.Let.Let100
          Test.Size.HList.Baseline.Baseline010
          Test.Size.HList.Baseline.Baseline020
          Test.Size.HList.Baseline.Baseline030
          Test.Size.HList.Baseline.Baseline040
          Test.Size.HList.Baseline.Baseline050
          Test.Size.HList.Baseline.Baseline060
          Test.Size.HList.Baseline.Baseline070
          Test.Size.HList.Baseline.Baseline080
          Test.Size.HList.Baseline.Baseline090
          Test.Size.HList.Baseline.Baseline100
          Test.Size.HList.Index.Ix010
          Test.Size.HList.Index.Ix020
          Test.Size.HList.Index.Ix030
          Test.Size.HList.Index.Ix040
          Test.Size.HList.Index.Ix050
          Test.Size.HList.Index.Ix060
          Test.Size.HList.Index.Ix070
          Test.Size.HList.Index.Ix080
          Test.Size.HList.Index.Ix090
          Test.Size.HList.Index.Ix100
          Test.Size.HList.LetAs.LetAs010
          Test.Size.HList.LetAs.LetAs020
          Test.Size.HList.LetAs.LetAs030
          Test.Size.HList.LetAs.LetAs040
          Test.Size.HList.LetAs.LetAs050
          Test.Size.HList.LetAs.LetAs060
          Test.Size.HList.LetAs.LetAs070
          Test.Size.HList.LetAs.LetAs080
          Test.Size.HList.LetAs.LetAs090
          Test.Size.HList.LetAs.LetAs100
          Test.Size.HList.LetAsCPS.LetAsCPS010
          Test.Size.HList.LetAsCPS.LetAsCPS020
          Test.Size.HList.LetAsCPS.LetAsCPS030
          Test.Size.HList.LetAsCPS.LetAsCPS040
          Test.Size.HList.LetAsCPS.LetAsCPS050
          Test.Size.HList.LetAsCPS.LetAsCPS060
          Test.Size.HList.LetAsCPS.LetAsCPS070
          Test.Size.HList.LetAsCPS.LetAsCPS080
          Test.Size.HList.LetAsCPS.LetAsCPS090
          Test.Size.HList.LetAsCPS.LetAsCPS100

    build-depends:
        base
      , typelet
      , tasty
      , tasty-hunit
      , tasty-quickcheck
    ghc-options:
        -Wall

-- To use the doctest tests, enable flag build-doctest-examples
test-suite doctest-typelet
    type:
        exitcode-stdio-1.0
    default-language:
        Haskell2010
    hs-source-dirs:
        doctest
    main-is:
        DoctestTypeLet.hs
    build-depends:
        base
      , doctest
      , typelet
    x-doctest-components:
        exe:doctest-examples-typelet

    if !flag(build-doctest-examples)
      buildable: False

executable doctest-examples-typelet
    main-is:
        DoctestExamplesTypeLet.hs
    default-language:
        Haskell2010
    default-extensions:
        FlexibleContexts
    hs-source-dirs:
        doctest-examples
    build-depends:
        base
      , typelet
    ghc-options:
        -Wwarn

    if !flag(build-doctest-examples)
      buildable: False

Flag build-doctest-examples
  Description: Build doctest-examples-typelet (for testing only)
  Default: False

Flag include-size-tests
  Description: Include size tests in the test suite
  Default: True