name:               some
version:            1.0.3
stability:          provisional
cabal-version:      >=1.10
build-type:         Simple
author:
  James Cook <mokus@deepbondi.net>, Oleg Grenrus <oleg.grenrus@iki.fi>

maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
license:            BSD3
license-file:       LICENSE
homepage:           https://github.com/phadej/some
category:           Data, Dependent Types
synopsis:           Existential type: Some
description:
  This library defines an existential type 'Some'.
  .
  @
  data Some f where
  \    Some :: f a -> Some f
  @
  .
  in few variants, and utilities to work with it.
  .
  If you are unsure which variant to use, use the one in "Data.Some" module.

tested-with:
  GHC ==7.0.4
   || ==7.2.2
   || ==7.4.2
   || ==7.6.3
   || ==7.8.4
   || ==7.10.3
   || ==8.0.2
   || ==8.2.2
   || ==8.4.4
   || ==8.6.5
   || ==8.8.4
   || ==8.10.4
   || ==9.0.1

extra-source-files: ChangeLog.md

flag newtype-unsafe
  description:
    Use implementation using @newtype@ and unsafe @Any@, instead of GADT

  manual:      True
  default:     True

source-repository head
  type:     git
  location: git://github.com/phadej/some.git
  subdir:   some

library
  default-language: Haskell2010
  hs-source-dirs:   src

  if flag(newtype-unsafe)
    cpp-options: -DSOME_NEWTYPE

  -- main module
  exposed-modules:  Data.Some
  exposed-modules:
    Data.GADT.Compare
    Data.GADT.DeepSeq
    Data.GADT.Show
    Data.Some.Church
    Data.Some.GADT
    Data.Some.Newtype

  other-modules:    Data.GADT.Internal
  build-depends:
      base     >=4.3     && <4.16
    , deepseq  >=1.3.0.0 && <1.5

  if !impl(ghc >=7.8)
    build-depends: type-equality >=1 && <1.1

  if !impl(ghc >=8.0)
    build-depends:
        semigroups           >=0.18.5 && <0.20
      , transformers         >=0.3    && <0.6
      , transformers-compat  >=0.6    && <0.7

  if impl(ghc >=9.0)
    -- these flags may abort compilation with GHC-8.10
    -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295
    ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode

  if impl(ghc >=9.1)
    ghc-options: -Wmissing-kind-signatures

test-suite hkd-example
  default-language: Haskell2010
  type:             exitcode-stdio-1.0
  hs-source-dirs:   test
  main-is:          HKD.hs
  build-depends:
      base
    , some