Name:                first-class-patterns
Version:             0.3.2.4
Author:              Reiner Pope, Brent Yorgey
Maintainer:          Kowainik <xrom.xkov@gmail.com>
License:             BSD3
License-file:        LICENSE
Synopsis:            First class patterns and pattern matching, using type families
Description:

  This package implements a library of first class patterns. The
  initial basis for this library was Morten Rhiger's \"Type-safe
  pattern combinators\"; the patterns can be used in an almost
  identical way to those of Morten Rhiger. In a series of blog
  posts at
  <http://reinerp.wordpress.com/category/pattern-combinators/>
  the types of patterns were made more revealing using type
  families, and a simpler implementation was used which avoids
  some book-keeping.
  .
  The library reimplements most of Haskell's built-in
  pattern matching facilities, plus some more. The pattern
  matches of this library are lightweight: when GHC's
  optimisation is turned on, all overhead should be optimised
  away, leaving a standard Haskell pattern match.
  .
  If you're just reading the documentation for this library for
  the first time, start with "Data.Pattern".

Cabal-Version:       2.0
Category:            Data, Pattern
Build-Type:          Simple
Stability:           experimental
homepage:            https://github.com/kowainik/first-class-patterns
bug-reports:         https://github.com/kowainik/first-class-patterns/issues
tested-with:         GHC == 8.2.2
                   , GHC == 8.4.3
extra-doc-files:     README.md
                   , CHANGES.md

source-repository head
  type:                 git
  location:             git://github.com/kowainik/first-class-patterns.git

library
  Build-Depends:
    base >= 4.5 && < 5,
    transformers >= 0.1.0 && < 0.6
  Exposed-modules:     Data.Pattern
                       Data.Pattern.Base
                       Data.Pattern.Base.TypeList
                       Data.Pattern.Base.Tuple
                       Data.Pattern.Common
  Other-modules:       Data.Pattern.Base.Difference

  default-extensions:  EmptyDataDecls
                       FlexibleInstances
                       GeneralizedNewtypeDeriving
                       GADTs
                       Rank2Types
                       ScopedTypeVariables
                       TypeFamilies
                       TypeOperators

  default-language:    Haskell2010

  -- necessary to get all the patterns properly inlined. Note that putting
  -- {-# INLINE #-} pragmas every doesn't seem to work, due to some subtlety
  -- of the inliner.
  -- TODO: test with recent ghc versions and check this
  ghc-options:
                     -funfolding-use-threshold=1000
                     -funfolding-creation-threshold=1000