packages feed

gigaparsec-0.2.2.2: gigaparsec.cabal

cabal-version:      3.0
-- The cabal-version field refers to the version of the .cabal specification,
-- and can be different from the cabal-install (the tool) version and the
-- Cabal (the library) version you are using. As such, the Cabal (the library)
-- version used must be equal or greater than the version stated in this field.
-- Starting from the specification version 2.2, the cabal-version field must be
-- the first thing in the cabal file.

-- Initial package description 'gigaparsec' generated by
-- 'cabal init'. For further documentation, see:
--   http://haskell.org/cabal/users-guide/
--
-- The name of the package.
name:               gigaparsec

-- The package version.
-- See the Haskell package versioning policy (PVP) for standards
-- guiding when and how versions should be incremented.
-- https://pvp.haskell.org
-- PVP summary:     +-+------- breaking API changes
--                  | | +----- non-breaking API additions
--                  | | | +--- code changes with no API change
version:            0.2.2.2

-- A short (one-line) description of the package.
synopsis:
    Refreshed parsec-style library for compatiblity with Scala parsley

-- A longer description of the package.
description:
    This is a monadic parser combinator designed to be easy to use,
    especially for beginners, and have API parity with the
    @[parsley](https://github.com/j-mie6/parsley)@ library. It supports
    design patterns introduced in /Design Patterns for Parser Combinators/.

-- URL for the project homepage or repository.
homepage:           https://github.com/j-mie6/gigaparsec

-- The license under which the package is released.
license:            BSD-3-Clause

-- The file containing the license text.
license-file:       LICENSE

-- The package author(s).
author:             Jamie Willis

-- An email address to which users can send suggestions, bug reports, and patches.
maintainer:         j.willis19@imperial.ac.uk

-- A copyright notice.
copyright: (c) 2023-present Jamie Willis, Gigaparsec Maintainers
category:           Text
build-type:         Simple

-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.
-- Don't add README.md here, because it contains stuff specific to the repo itself
extra-doc-files:    CHANGELOG.md
stability:          alpha

-- Extra source files to be distributed with the package, such as examples, or a tutorial module.
-- extra-source-files:

common warnings
    ghc-options: -Weverything -Wno-unsafe -Wno-implicit-prelude -Wno-missing-local-signatures -Wno-star-is-type

common extensions
    -- Extensions we want enabled without having to specify them
    default-extensions: ScopedTypeVariables, RankNTypes, BangPatterns, TypeApplications,
                        MultiWayIf, DerivingStrategies, InstanceSigs, StandaloneKindSignatures,
                        ImportQualifiedPost, RecordWildCards

common base
    -- Other library packages from which modules are imported.
    -- 4.14 is GHC 8.10 (the 2022 State of Haskell indicates 41% still use 8.10)
    build-depends:    base >=4.14 && < 5

library
    import:           warnings, extensions, base

    -- Modules exported by the library.
    exposed-modules:  Text.Gigaparsec,
                      Text.Gigaparsec.Char,
                      Text.Gigaparsec.Combinator,
                      Text.Gigaparsec.Combinator.NonEmpty,
                      Text.Gigaparsec.Debug,
                      Text.Gigaparsec.Errors.Combinator,
                      Text.Gigaparsec.Errors.DefaultErrorBuilder,
                      Text.Gigaparsec.Errors.ErrorBuilder,
                      Text.Gigaparsec.Errors.ErrorGen,
                      Text.Gigaparsec.Expr,
                      Text.Gigaparsec.Expr.Chain,
                      Text.Gigaparsec.Expr.Infix,
                      Text.Gigaparsec.Expr.Subtype,
                      Text.Gigaparsec.Patterns,
                      Text.Gigaparsec.Position,
                      Text.Gigaparsec.Registers,
                      Text.Gigaparsec.Token.Descriptions,
                      Text.Gigaparsec.Token.Lexer,
                      Text.Gigaparsec.Token.Patterns,

                      -- Internals
                      Text.Gigaparsec.Internal,
                      Text.Gigaparsec.Internal.Errors,
                      Text.Gigaparsec.Internal.Errors.CaretControl,
                      Text.Gigaparsec.Internal.Errors.DefuncBuilders,
                      Text.Gigaparsec.Internal.Errors.DefuncError,
                      Text.Gigaparsec.Internal.Errors.DefuncHints,
                      Text.Gigaparsec.Internal.Errors.DefuncTypes,
                      Text.Gigaparsec.Internal.Errors.ErrorItem,
                      Text.Gigaparsec.Internal.Errors.ParseError,
                      Text.Gigaparsec.Internal.RT,
                      Text.Gigaparsec.Internal.Require,
                      Text.Gigaparsec.Internal.Token.Generic,
                      Text.Gigaparsec.Internal.Token.Lexer,
                      Text.Gigaparsec.Internal.Token.Names,
                      Text.Gigaparsec.Internal.Token.Numeric,
                      Text.Gigaparsec.Internal.Token.Symbol,
                      Text.Gigaparsec.Internal.Token.Text,

    -- this can probably be loosened?
    build-depends:    containers       >= 0.6   && < 0.7,
                      selective        >= 0.6   && < 0.8,
                      pretty-terminal  >= 0.1.0 && < 0.2,
                      template-haskell >= 2.16  && < 3

    -- Modules included in this library but not exported.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:

    -- Directories containing source files.
    hs-source-dirs:   src
    include-dirs:     includes
    install-includes: includes/portable-unlifted.h

    -- Base language which the package is written in.
    default-language: Haskell2010

test-suite gigaparsec-test
    import:           warnings, extensions, base

    default-extensions: OverloadedStrings, TypeOperators, BlockArguments, GADTs

    -- Base language which the package is written in.
    default-language: Haskell2010

    -- Modules included in this executable, other than Main.
    other-modules: Text.Gigaparsec.GigaparsecTests,
                   Text.Gigaparsec.PrimitiveTests,
                   Text.Gigaparsec.CharTests,
                   Text.Gigaparsec.CombinatorTests,
                   Text.Gigaparsec.DebugTests,
                   Text.Gigaparsec.ExprTests,
                   Text.Gigaparsec.ErrorsTests,
                   Text.Gigaparsec.Expr.ChainTests,
                   Text.Gigaparsec.Expr.InfixTests,
                   Text.Gigaparsec.TokenTests,
                   Text.Gigaparsec.Token.NamesTests,
                   Text.Gigaparsec.Internal.Test,
                   Text.Gigaparsec.Internal.TestError,
                   Text.Gigaparsec.Internal.PlainString

    ghc-options: -Wno-missing-export-lists -Wno-missing-safe-haskell-mode -Wno-safe
                 -Wno-missing-import-lists -Wno-all-missed-specialisations -Wno-type-defaults
                 -Wno-missing-kind-signatures -Wno-orphans -Wno-monomorphism-restriction

    -- The interface type and version of the test suite.
    type:             exitcode-stdio-1.0

    -- Directories containing source files.
    hs-source-dirs:   test

    -- The entrypoint to the test suite.
    main-is:          Main.hs

    -- Test dependencies.
    build-depends:
        gigaparsec,
        containers >= 0.6 && < 0.7,
        deepseq >= 1.4 && < 1.6,
        bytestring >= 0.9 && < 0.13,
        --deriving-compat >= 0.6 && < 0.7,
        tasty >=1.1 && <1.6,
        tasty-expected-failure >=0.11 && <0.13,
        tasty-hunit >=0.9 && <0.11,
        --TODO: property based testing will be useful when we optimise combinators
        --      to test against their base implementations
        --tasty-quickcheck
        --TODO: performance testing with tasty-bench?
        --tasty-bench
        -- we'd need to keep the basefile files somewhere, cache in CI or keep in repo?
        knob >=0.1.1 && <0.3,

benchmark perf-test
    import:           warnings, extensions, base

    type:             exitcode-stdio-1.0

    default-extensions: OverloadedStrings, TypeOperators, BlockArguments, GADTs

    -- Base language which the package is written in.
    default-language: Haskell2010

    hs-source-dirs:  benchmarks
    build-depends:
        gigaparsec,
        --containers >= 0.6 && < 0.7,
        gauge >= 0.1 && < 0.3,
        deepseq >= 1.4 && < 1.6

    main-is:          Main.hs