cabal-version:      2.2
name:               overloaded
version:            0.1.2
synopsis:           Overloaded pragmas as a plugin
description:
  Implement @Overloaded@ pragmas as a source plugin
  .
  For example we can replace
  .
  @
  {-\# LANGUAGE OverloadedStrings #-}
  @
  .
  with
  .
  @
  {-\# OPTIONS -fplugin=Overloaded -fplugin-opt=Overloaded:Strings #-}
  @

license:            BSD-3-Clause
license-file:       LICENSE
author:             Oleg Grenrus <oleg.grenrus@iki.fi>
maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
category:           Plugin
extra-source-files: CHANGELOG.md
tested-with:        GHC ==8.6.5 || ==8.8.1

source-repository head
  type:     git
  location: https://github.com/phadej/overloaded.git

library
  default-language: Haskell2010
  hs-source-dirs:   src
  ghc-options:      -Wall
  exposed-modules:
    Overloaded
    Overloaded.Chars
    Overloaded.If
    Overloaded.Lists
    Overloaded.Naturals
    Overloaded.Numerals
    Overloaded.Plugin
    Overloaded.Symbols
    Overloaded.TypeNats
    Overloaded.TypeSymbols

  -- GHC boot dependencies
  build-depends:
    , base        ^>=4.12.0.0 || ^>=4.13.0.0
    , bytestring  ^>=0.10.8.2
    , containers  ^>=0.6.0.1
    , ghc         ^>=8.6 || ^>=8.8
    , text        ^>=1.2.3.0
    , time        ^>=1.8.0.2 || ^>=1.9.3

  -- other dependencies
  build-depends:
    , fin              ^>=0.1
    , record-hasfield  ^>=1.0
    , sop-core         ^>=0.5.0.0
    , split            ^>=0.2.3.3
    , syb              ^>=0.7.1
    , symbols          ^>=0.3.0.0
    , vec              ^>=0.1.1.1

test-suite example
  default-language: Haskell2010
  type:             exitcode-stdio-1.0
  hs-source-dirs:   example
  main-is:          Example.hs

  -- inherited dependencies
  build-depends:
    , base
    , bytestring
    , fin
    , overloaded
    , sop-core
    , symbols
    , vec

  -- test dependencies
  build-depends:
    , HUnit        ^>=1.6.0.0
    , tasty
    , tasty-hunit

test-suite example-idiom-brackets
  default-language: Haskell2010
  type:             exitcode-stdio-1.0
  hs-source-dirs:   example
  main-is:          IdiomBrackets.hs

  -- inherited dependencies
  build-depends:
    , base
    , overloaded

  -- test dependencies
  build-depends:
    , HUnit        ^>=1.6.0.0
    , tasty
    , tasty-hunit

test-suite example-record-fields
  default-language: Haskell2010
  type:             exitcode-stdio-1.0
  hs-source-dirs:   example
  main-is:          RecordFields.hs

  -- inherited dependencies
  build-depends:
    , base
    , overloaded

  -- test dependencies
  build-depends:
    , HUnit            ^>=1.6.0.0
    , record-hasfield
    , tasty
    , tasty-hunit

library optics-hasfield
  default-language: Haskell2010
  hs-source-dirs:   optics-hasfield
  exposed-modules:  Optics.HasField
  build-depends:
    , base
    , optics-core
    , record-hasfield

test-suite test
  default-language: Haskell2010
  type:             exitcode-stdio-1.0
  hs-source-dirs:   test
  main-is:          Tests.hs
  other-modules:
    Overloaded.Test.Chars
    Overloaded.Test.If
    Overloaded.Test.Labels
    Overloaded.Test.Labels.GenericLens
    Overloaded.Test.Lists
    Overloaded.Test.Naturals
    Overloaded.Test.Numerals
    Overloaded.Test.RecordFields
    Overloaded.Test.Strings
    Overloaded.Test.Symbols
    Overloaded.Test.TypeSymbols
    Regexp.Term
    Regexp.Type

  -- inherited dependencies
  build-depends:
    , base
    , bytestring
    , containers
    , fin
    , optics-core
    , optics-hasfield
    , overloaded
    , record-hasfield
    , sop-core
    , symbols
    , text
    , time
    , vec

  -- test dependencies
  build-depends:
    , generic-lens    ^>=1.2.0.0
    , lens            ^>=4.18
    , singleton-bool  ^>=0.1.5
    , tasty           ^>=1.2.3
    , tasty-hunit     ^>=0.10.0.2