cabal-version:       1.14
name:                HsYAML
version:             0.2.1.0
x-revision:          4

synopsis:            Pure Haskell YAML 1.2 processor
homepage:            https://github.com/hvr/HsYAML
bug-reports:         https://github.com/hvr/HsYAML/issues
license:             GPL-2
X-SPDX-License-Identifier: GPL-2.0-or-later
license-files:       LICENSE.GPLv2 LICENSE.GPLv3
author:              Herbert Valerio Riedel
maintainer:          hvr@gnu.org
copyright:           2015-2018 Herbert Valerio Riedel
                   , 2007-2008 Oren Ben-Kiki
category:            Text
build-type:          Simple
tested-with:
  GHC == 9.2.1
  GHC == 9.0.1
  GHC == 8.10.7
  GHC == 8.8.4
  GHC == 8.6.5
  GHC == 8.4.4
  GHC == 8.2.2
  GHC == 8.0.2
  GHC == 7.10.3
  GHC == 7.8.4
  GHC == 7.6.3
  GHC == 7.4.2

description:
  @HsYAML@ is a [YAML 1.2](http://yaml.org/spec/1.2/spec.html) processor, i.e. a library for parsing and serializing YAML documents.

  .
  Features of @HsYAML@ include:
  .
   * Pure Haskell implementation with small dependency footprint and emphasis on strict compliance with the [YAML 1.2 specification](http://yaml.org/spec/1.2/spec.html).
   * Direct decoding to native Haskell types via (@aeson@-inspired) typeclass-based API (see "Data.YAML").
   * Allows round-tripping while preserving ordering, anchors, and comments at Event-level.
   * Support for constructing custom YAML node graph representation (including support for cyclic YAML data structures).
   * Support for the standard (untyped) /Failsafe/, (strict) /JSON/, and (flexible) /Core/ \"schemas\" providing implicit typing rules as defined in the YAML 1.2 specification (including support for user-defined custom schemas; see "Data.YAML.Schema").
   * Support for emitting YAML using /Failsafe/, (strict) /JSON/, and (flexible) /Core/ \"schemas\" (including support for user-defined custom encoding schemas; see "Data.YAML.Schema").
   * Event-based API resembling LibYAML's Event-based API (see "Data.YAML.Event").
   * Low-level API access to lexical token-based scanner (see "Data.YAML.Token").
   .
   See also the <//hackage.haskell.org/package/HsYAML-aeson HsYAML-aeson> package which allows to decode and encode YAML by leveraging @aeson@'s 'FromJSON' and 'ToJSON' instances.

extra-source-files:
  ChangeLog.md

source-repository head
  type: git
  location: https://github.com/hvr/HsYAML.git

flag exe
  description: Enable @exe:yaml-test@ component
  manual: True
  default: False

library
  hs-source-dirs:      src
  exposed-modules:     Data.YAML
                     , Data.YAML.Schema
                     , Data.YAML.Event
                     , Data.YAML.Token
  other-modules:       Data.YAML.Loader
                     , Data.YAML.Dumper
                     , Data.YAML.Internal
                     , Data.YAML.Event.Internal
                     , Data.YAML.Event.Writer
                     , Data.YAML.Pos
                     , Data.YAML.Schema.Internal
                     , Data.YAML.Token.Encoding
                     , Util
                     , Data.DList

  default-language:    Haskell2010
  other-extensions:    DeriveGeneric
                       FlexibleContexts
                       FlexibleInstances
                       FunctionalDependencies
                       MultiParamTypeClasses
                       OverloadedStrings
                       PostfixOperators
                       RecordWildCards
                       RecursiveDo
                       Safe
                       ScopedTypeVariables
                       Trustworthy
                       TypeSynonymInstances

  build-depends:       base         >=4.5   && <4.17
                     , bytestring   >=0.9   && <0.12
                     , containers   >=0.4.2 && <0.7
                     , deepseq      >=1.3.0 && <1.5
                     , text         >=1.2.3 && <2.1
                     , mtl          >=2.2.1 && <2.3
                     , parsec       >=3.1.13.0 && < 3.2

  -- for GHC.Generics
  if impl(ghc < 7.6)
    build-depends: ghc-prim

  if !impl(ghc >= 8.0)
    build-depends:     fail         >=4.9.0.0 && <4.10

  if !impl(ghc >= 7.10)
    build-depends:     nats         >=1.1.2 && <1.2

  ghc-options:         -Wall

executable yaml-test
  hs-source-dirs: src-test
  main-is: Main.hs
  other-modules: TML

  default-language:    Haskell2010

  if flag(exe)
    build-depends: HsYAML
                   -- inherited constraints
                 , bytestring >= 0.10.8.0
                 , base
                 , text
                 , containers
                 , mtl
                   -- non-inherited
                 , megaparsec  >= 7.0 && < 10
                 , microaeson  == 0.1.*
                 , filepath    == 1.4.*
                 , directory   >= 1.2 && < 1.4
  else
    buildable: False

  ghc-options: -rtsopts

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

  ghc-options: -rtsopts

  build-depends: HsYAML
                   -- inherited constraints
                 , bytestring >= 0.10.8.0
                 , base
                 , text
                 , containers
                 , mtl
                   -- non-inherited
                 , QuickCheck == 2.14.*
                 , tasty == 1.4.*
                 , tasty-quickcheck == 0.10.*