0.10.3.0:

  We can now compile with GHC 9.4.4, so support for base 4.17
  has been added. Swish will not build with earlier versions of
  GHC 9.4, but I don't know how best to mark these as "do not
  install". Added autogen-modules fields for Paths_swish to
  appease Stack's sdist check.

0.10.2.0:

  Check we can build with stack lts-19 (GHC 9.0) and spaces
  around operators to please GHC 9.2. Dropped support for
  time < 1.5 as it hasn't been tested for a long while.

0.10.1.0:

  Support building with GHC 9.2. The Swish.Datatype module
  complains about non-exhaustive matches but it's in an
  irrefutable match so I'm not sure how to avoid this.

0.10.0.9:

  Support the semigroups 0.20 and initial support of the text 2.0
  release (not all dependencies have been updated yet).

0.10.0.8:

  Support hashable 1.4 release.

0.10.0.7:

  Support time 1.13 release.

0.10.0.6:

  Support recent time, network-uri, and semigroups releases.
  Bumped the minimum base version to 4.8 (GHC 7.10).

0.10.0.5:

  Support for base from ghc 9.0.

0.10.0.4:

  Support for base from ghc 8.10. Switched tested version to 8.8.3
  in swish.cabal.

0.10.0.3:

  No change to 0.10.0.3 other than a polyparse constraint (changed
  '<= 1.13' to '< 1.14'), moved to GHC 8.8 as the build version, and
  updated the copyright year.

  Removed the GHC 7.8 stack YAML file as it won't work with
  recent stack versions.

0.10.0.2:

  Switched hosting from bitbucket to gitlab (and mercurial to
  git). The new "home" location is https://gitlab.com/dburke/swish

  Bumped base to a maximum of 4.14 to support GHC 8.8, and
  bumped hashable to support version 1.3. Add conditional rules
  to avoid warnings when building with GHC 8.8.

0.10.0.1:

  Bump to support polyparse and its GHC 8.6 compatibility.

0.10.0.0:

  Updated packages to support building with ghc 8.6 (increase base
  and containers limit).

  The reason for the version bump is that there has been some
  internal build cleanup and removal of un-needed imports (thanks to
  weeder), which was done a while ago and I now forget whether there
  were any changes due to imported instances, so it is safer to
  increase the minor version number. There has been *no* change to
  functionality.

  Default stack.yaml file is now ghc 8.4, and added a ghc 8.2 version.

0.9.2.1:

  Updated the minimum base package to 4.5.0.0 (GHC 7.4.1), and removed
  some old code for supporting older GHC/package versions. There are
  some warnings when compiling with GHC pre version 8 (redudant imports)
  which I am currently too lazy to fix, but patches are welcome. Support
  for building with older versions of GHC is on a best-effort basis.
  Applied some HLint suggestions. Updated to allow time-1.9.1 (but not
  time-1.9.0). Updated to lts 11.1 in stack.yaml.

0.9.2.0:

  Initial support for ghc 8.4. Updated to lts 10.8 in stack.yaml so
  was able to drop extra intern dependency version. Now builds with
  -Wcompat if ghc 8.0 or later is used.

0.9.1.10:

  Updated the upper bound on time to work with ghc 8.2.1. Updated
  stack.yaml to use lts 9.1.

0.9.1.9:

  Updated the upper bound on HUnit. This only affects the tests.
  Finally added a stack.yaml file (partly addressing issue #27).

0.9.1.8:

  Updated the upper bound on polyparse and directory. Fixed build
  failure of RDFGraphTest with time >= 1.6. Updated the copyright
  years in README.md.

0.9.1.7:

  Turns out one of the constraints is needed by GHC 7.6.

0.9.1.6:

  Updated dependencies to support GHC 8.0 (RC1) and updated the code to
  remove the un-needed constraints pointed out to me by the new compiler.

0.9.1.5:

  Removed the developer flag as it causes problems with 'cabal upload'
  and added 2015 to the copyright statement in the cabal file. There
  are no code changes compared to 0.9.1.3.

0.9.1.4:

  Updated the upper bound on the semigroups and HUnit dependencies.
  This never got released on hackage due to a disagreement between
  myself and Cabal.

0.9.1.3:

  Updated ghc 7.10 support.

0.9.1.2:

  Updated the upper bound on the polyparse dependency and fixed an
  error in the Swish.RDF.Query documentation (issue #25). Initial
  support for ghc 7.10.

  The list of changes has been removed from the cabal file since it
  is in the CHANGELOG.

0.9.1.1:

  Updated the upper bound on the semigroups and polyparse dependencies.

0.9.1.0:

  The network-uri flag has been added, which uses the network-uri
  package to provide Network.URI. This has lead to the minimum version
  of the network package being bumped to 2.4.0.0 to avoid some CPP
  issues during building. The Network.URI.Ord module now really does
  nothing.

  Updated the upper bound on the text dependency (requires an
  update to intern to use).

  Updated the upper bound on the time dependency to 1.5 (at this time
  the test suite will not build due to a failing dependency, so
  it is untested).

0.9.0.15:

  Updated the upper bound on the semigroups dependency.
  Renamed README to README.md

0.9.0.14:

  Updated the upper bound on the network dependency.

0.9.0.13:

  Updated the upper bound on the semigroups dependency (Issue #20).

0.9.0.12:

  Updated the upper bound on the text dependency to include version
  1.1 (requires an update to semigroups to use).

0.9.0.11:

  Hackage has a better chance of finding the CHANGELOG file if it is
  included in the distribution! There are no changes to the library or
  examples.

0.9.0.10:

  Renamed CHANGES to CHANGELOG in the hope it will get picked up by
  Hackage. There are no changes to the library or examples.

0.9.0.9:

  Updated the upper bound on the semigroups dependency (thanks to Leif
  Warner).

  Updated the upper bound on the text dependency (however, requires
  changes to intern and semigroups to use).

0.9.0.8:

  Updated the upper bound on the semigroups dependency (thanks to Leif
  Warner).

  Display library version when running the runw3ctests executable and
  ensure there is a space between file name and test result in the
  screen output.

0.9.0.7

  Minor documentation fix for Swish.RDF.Graph.quote.

0.9.0.6:

  Turtle/N3 output: \f characters in literals are converted to
  \u000C to work around some interoperability issues.

  Changed the test handling to use test-framework.

0.9.0.5:

  Turtle/N3 output: more changes for string literals containing
  double-quote characters.

  N3 Parser: parsing of string literals within three quote marks has
  been updated to match the Turtle parser.

  Turtle Parser: a few more error messages have been added.
  
0.9.0.4:

  Turtle parser: updated to the Candidate Recommendation (19 February
  2013) specification; added minor improvements to error messages when
  given invalid syntax. As part of the upgrade, there is no longer a
  default namespace set up for the empty prefix and numeric literals
  are no-longer converted into a 'canonical' form.

  Turtle/N3 output: improved string formatting (better handling of
  string literals with three or more consecutive " characters); blank
  node handling has been improved but the output may not be as elegant.

  NTriples parser: now accepts upper-case language tags such as
  en-UK (case is preserved).

  Swish.QName.LName names can now contain #, : and / characters.

  Added tests for the Turtle parser and formatter.

  The new w3ctests flag will build the runw3ctests executable,
  which will run the W3C Turtle tests (if downloaded from
  http://www.w3.org/2013/TurtleTests/).

  Minor fixes and additions to the documentation.

0.9.0.3:

  Fix minor Haddock issue with Swish.RDF.Parser.Utils.appendURIs.

0.9.0.2:

  Updated the upper bound on the polyparse dependency.

0.9.0.1:

  Updated the upper bound on the semigroups dependency (thanks to Leif
  Warner).

0.9.0.0:

  The module now builds against version 1.2 or 1.1 of the hashable
  package; as there have been significant changes to hashable in the
  1.2 release I have decided to bump up the version number to 0.9
  as a precaution.

  Fix failing test on 64-bit GHC (no library change).

  Very minor hlint changes.

0.8.0.3:

  Remove hashtable restriction (rewrite tests), remove binary constraint
  as it was apparently unneeded.

  Updates to support network version 2.4.0.0: the package now provides
  an Ord instance for Network.URI so Network.URI.Ord is now a no-op if
  network >= 2.4.0.0 is installed; fix up code to handle change to
  the API of relativeTo.

0.8.0.2:

  Restrict hashable to < 1.1.2.4 to try and avoid test
  failures - see
  http://travis-ci.org/#!/DougBurke/swish/builds/2360859
  This is a hack and the tests should be updated.

  Updated directory constraint to allow 1.2 on ghc 7.6.

0.8.0.1:

  Internal changes to Turtle/N3 formatting. No user-visible changes.

0.8.0.0:

  The LDGraph class now uses Set (Arc lb), rather than [Arc lb], for
  setArcs, getArcs, and update. Several data types - e.g. NSGraph -
  now use sets rather than lists. There are a number of API tweaks -
  e.g. the addition of Ord constraints and the removal of Functor,
  Foldable, and Traversable instances. Not all list of Arcs have been
  converted since a review is needed to see where it makes sense and
  where it does not. This definitely speeds up some operations but
  a full analysis has not been attempted.

  Replaced used of Data.LookupMap with Data.Map.Map. This has led to
  the removal of a number of language extensions from some modules.

  Added Network.URI.Ord to provide an ordering for URIs.

  A few other minor changes have been made: the removal of subset and
  equiv from Swish.Utils.ListHelpers; the ordering used for RDFLabel
  values has changed; added a Monoid instance for VarBinding; added
  Ord instances for a number of containers; removed some un-needed
  constraints; added Network.URI.Ord.

  The containers upper limit has been increased to support version 0.5.

0.7.0.2:

  Swish.QName.LName now requires all characters to be ASCII. This
  avoids downstream later when trying to convert a QName to a URI.

0.7.0.1:

  URI parsing has changed slightly. The only user-visible change is that
  error messages will be slightly different, in particular when
  given an IRI in Turtle or NTriples format. Unfortunately IRIs are
  still not supported.

0.7.0.0:

  For code that uses the Swish script language, the main change is to
  import Swish rather than Swish.RDF.SwishMain, and to note that the
  other Swish.RDF.Swish* modules are now called Swish.*.

  For code that uses the graph library, the main changes are that
  Swish.RDF.RDFGraph is now called Swish.RDF.Graph, the Lit
  constructor of the RDFLabel has been split into three (Lit, LangLit,
  and TypedLit) and a new LanguageTag type introduced, local names now
  use the LName type (previously they were just Text values), and the
  parsers and formatters have renamed to Swish.RDF.Parser.* and
  Swish.RDF.Formatter.*.

  - Moved a number of modules around: generic code directly into Swish
    and the Swish.RDF.RDF* forms renamed to Swish.RDF.*. Some modules
    have been moved out of the Swish.Utils.* namespace. Generic modules
    have been placed into the Data.* namespace. The Swish.RDF.Swish
    modules have been moved to Swish.* and Swish.RDF.SwishMain has
    been removed; use Swish instead.

  - Parsing modules are now in the Swish.RDF.Parser hierarchy and
    Swish.RDF.RDFParser has been renamed to Swish.RDF.Parser.Utils.

  - Formatting modules are now in the Swish.RDF.Formatter hierarchy.

  - RDF literals are now stored using the Lit, LangLit, or TypedLit
    constructors (from RDFLabel) rather than using just Lit. Language
    codes are now represented by Swish.RDF.Vocabulary.LanguageTag
    rather than as a ScopedName.

  - Local names are now represented by the Swish.QName.LName type
    rather than as a Text value. A few routines now return a Maybe value
    rather than error-ing out on invalid input.

  - Make use of Data.List.NonEmpty in a few cases.

  - Removed mkTypedLit from Swish.RDF.RDFParser; use
    Swish.RDF.RDFDatatype.makeDataTypedLiteral instead.

  - Removed asubj, apred and aobj from Swish.RDF.GraphClass and
    Swish.RDF.RDFGraph; use arcSubj, arcPred or arcObj instead.
    
  - Clarified that Swish.RDF.RDFDatatypeXsdDecimal is for xsd:decimal
    rather than xsd:double.

  - Removed the containedIn element of the LDGraph type class as it
    was un-used. The arguments to setArcs have been flipped,
    replaceArcs removed, add renamed to addGraphs, and emptyGraph
    added.

  - Removed various exported symbols from a range of modules as they were
    un-used.

  - Use Word32 rather than Int for label indexes
    (Swish.GraphMatch.LabelIndex) and in the bnode counts when formatting
    to N3/Turtle.

  - Minor clean up of the LookupMap module: mergeReplaceOrAdd and mergeReplace
    are now combined into mergeReplace; mapSelect, mapApplytoAll, and
    mapTranslate* have been removed; documentation slightly improved; and a
    few minor internal clean ups.

  - Removed the Swish.Utils.MiscHelpers module and moved single-use
    functionality out of Swish.Utils.ListHelpers.

  - Removed partCompareOrd, partCompareMaybe, partCompareListOrd and 
    partCompareListPartOrd from Swish.Utils.PartOrderedCollection.

  - Do not define swap if using GHC >= 7.0.1.

  - Bump the upper constraint on the containers package to include
    version 0.5.

  - Support version 0.9 of intern using conditional compilation in
    Data.Interned.URI (for ghc 7.4)

  - Switch to Control.Exception.try from System.IO.Error.try to avoid
    complaints from ghc 7.4.2

0.6.5.3:

  - Updated cabal file so that tests depend on the library rather
    than individual modules.

  - fix intern to 0.8 for ghc < 7.4 and 0.8.* for greater

0.6.5.2:

  - Upgrade polyparse upper limit to include version 1.8.

0.6.5.1:

  - Haddock fixes.

0.6.5.0:

  - Dependency updates (updated filepath and removed array).

0.6.4.0:

  - Added support for xsd:decimal with Swish.RDF.RDFDatatypeXsdDecimal
    and Swish.RDF.MapXsdDecimal thanks to William Waites
    (<https://bitbucket.org/ww>).

0.6.3.0:

  - Added Swish.RDF.Vocabulary.SIOC.

0.6.2.1:

  - hackage build fixes only

0.6.2.0:

  - Split out vocabularies into Swish.RDF.Vocabulary.DublinCore,
    Swish.RDF.Vocabulary.FOAF, Swish.RDF.Vocabulary.Geo,
    Swish.RDF.Vocabulary.OWL, Swish.RDF.Vocabulary.RDF, and
    Swish.RDF.Vocabulary.XSD (some of these are new and additional
    terms added to the pre-existing vocabularies). A few have also
    been added to Swish.RDF.RDFGraph.

  - Minimum Cabal version has been updated to 1.9.2 as the tests have
    been converted to take advantage of the support now in Cabal; this
    means that the tests flag has been replaced by the --enable-tests
    option.

  - Change to the internal labelling of the RDFS container-property
    axioms in Swish.RDF.RDFProofContext.

  - Moved src/ to app/, and took advantage of the emptiness to move
    the library code into src/.

0.6.1.2:

  - corrected mtl constraint from >= 1 to >= 2 as the code does not
    build with mtl=1 and increased the upper limit on time to 1.4.

0.6.1.1:

  - minor improvements to error message when parsing Turtle, N3 or
    Ntriples format; a fragment of the remaining text to be parsed is
    included to provide some context for the user (it is still not as
    useful as the error message provided when parsec was being used).

0.6.1.0:

  - add support for reading and writing Turtle format and the
    Swish.RDF.TurtleFormatter and Swish.RDF.TurtleParser modules.  No
    tests are provided at this time, although the parser handles most
    of the W3C test files; the issues include Network.URI not
    recognizing some IRI's and issues with equating XSD decimal and
    double values due to canonicalization.

0.6.0.1:

  - use the hashing interface provided by Data.Hashable rather than
    Swish.Utils.MiscHelpers.

0.6.0.0:

  - use the intern package to create Data.Interned.URI and use
    this within QName to speed up the equality check.

0.5.0.3:

  - Missed a FlexibleInstances pragma for ghc 7.2.

0.5.0.2:

  - Removed random and bytesttring package constraints and moved HUnit
    constraint to only apply if the tests flag is used. Added
    FlexibleInstances pragma for ghc 7.2 compatability.

0.5.0.1:

  - updated package constraints in cabal file to try and support
    building with ghc 7.2. No code change.

0.5.0.0:

  - The constructors for ScopedName and QName have been removed in
    order to allow a simple experimental optimisation (partly added in
    0.4.0.0). A similar change has been added for Namespace (but no
    optimisation).

0.4.0.0:

  - Use polyparse rather than parsec-2 for parsing. As part of this,
    the parsing is done using Text rather than String values, where
    sensible.  Some parsing should be faster now, but that is more due
    to a better use of parser combinators than differences in the
    parsing library used. No serious attempt at optimisation has been
    attempted.

    Unfortunately the error messages created on invalid input are
    significantly less helpfull than in the previous version.

  - removed Swish.Utils.DateTime and Swish.Utils.TraceHelpers

  - removed the following exported symbols from Swish.Utils.LookupMap:
        mapSortByKey, mapSortByVal

  - removed the following exported symbols from Swish.Utils.ListHelpers:
        allf, anyf, combinations, ffold, hasPartitions,
        mapset, pairsUngroup, powerSequences, powerSequences_inf

  - removed the following exported symbols from Swish.Utils.MiscHelpers:
        assert, stricmp, lower, quote

  - removed _ from exported symbols; the conversion is mainly to camel
    case but some may retain lower case parts (e.g. xxx_1_1_inv to
    xxx11inv).

  - Namespace now uses Maybe Text to store the optional prefix rather
    than an ad-hoc ""/"?" solution and URI rather than String for the
    URI.  The local part of ScopedName is now Text.  QName also uses
    URIs and no longer exports the constructor so newQName or related
    should be used to create QNames.

    We have currently lost N3 formatting of the default prefix (any
    default prefix elements end up getting written out fully
    qualified). The output is still valid N3 but perhaps not what
    you'd expect.

0.3.2.1:

  - use foldl' rather than foldl in some modules

  - Swish.Utils.*:

    - marked routines as deprecated

0.3.2.0:

  - Swish.RDF.N3Parser:

    - the parser no longer has a set of pre-defined namespaces with
      the aim of reducing un-needed statements on output.

  There is no API change worthy of a bump of the minor version but
  the behavioural change is large enough to make it worth while.

0.3.1.2:

  - Swish.RDF.RDFGraph:

    - toRDFGraph now uses the supplied labels to set up the namespace
      rather than using an empty namespace map.

    - minor documentation improvements.

0.3.1.1:

  - N3 I/O: 

    - strings ending in a double-quote character are now written out
      correctly.

    - xsd:double values are not written using XSD canonical
      form/capital E but with using a lower-case exponent.

    - in input, xsd:double literals are converted to XSD canonical
      form (as stored in 'RDFLabel'), which can make simple textual
      comparison of literals fail.

  - RDFLabel:

    - the Eq instance now ignores the case of the language tag for
      literals

    - the Show instance uses the XSD canonical form for xsd:boolean,
      xsd:integer, xsd:decimal and xsd:double literals. 

  - The ToRDFLable and FromRDFLabel classes replicate
    existing functionality in Swish.RDF.RDFDatatype; this should
    be cleaned up.

0.3.1.0:

  - NSGraph:

    - added Monoid instance with a Label constraint.

  - RDFLabel:

    - added IsString instance.

    - added ToRDFLabel and FromRDFLabel type classes for converting to
      and from RDFLabel along with instances for some standard Haskell
      types.

  - RDFTriple:

    - added toRDFTriple and fromRDFTriple functions that take advantage
      of the To/FromRDFLabel typeclasses to ease conversion from/to Arcs.

  - QName and ScopedName:

    - added IsString instance.

  - UTCTime support (To/FromRDFLabel) has required adding old-locale
    and time to the package constraints.

  - added xsd_dateTime export to Swish.RDF.Vocabulary.

  - added Swish and Swish.RDF modules for documentation purposes.

  - marked Swish.Utils.DateTime as deprecated.

  - the N3 formatter now writes true, 1, 1.2, 1.2e34 rather than
    "true"^^xsd:boolean, "1"^^xsd:integer, "1.2"^^xsd:decimal
    and "1.2e34"^^xsd:double.

  - improved test coverage.

0.3.0.3:

  - changed scripts/SwishExample.ss script so that the proof succeeds.

  - minor documentation improvements, including the addition of the
    Swish script format in Swish.RDF.SwishScript.

  - minor changes to behavior of Swish in several edge cases.

0.3.0.2:

  - bugfix: stop losing triples with a bnode subject when using the
    N3 Formatter which also makes the scripts/SwishTest.ss script run
    successfully.

  - several commands in Swish scripts now create screen
    output as an aid to debugging.

  - added the developer flag.

0.3.0.1:

  - updated the Swish script parser to work with the changes in
    0.3.0.0 (reported by Rick Murphy).

  - several example scripts are installed in the scripts/ directory,
    although only VehicleCapacity.ss works with this release.

0.2.1 to 0.3.0.0:

  - Renamed module hierarchy from

      Swish.HaskellRDF.*
      Swish.HaskellUtils.*

    to

      Swish.RDF.*
      Swish.Utils.*

  - removed modules, either because un-needed or replaced
    by other libraries:

    *) replaced with Data.Traversable instances

      Swish.HaskellUtils.FunctorM

    *) replaced with routines from Network.URI

      Swish.HaskellRDF.ProcessURI
      Swish.HaskellRDF.ParseURI

    *) copy of a Parsec module

      Swish.HaskellRDF.ParsecLanguage

    *) Replaced with Data.List.sort as only used the 
       stableQuickSort routine

      Swish.HaskellRDF.Sort.*

    *) Replaced use with simple parsec parser

      Swish.HaskellRDF.Dfa.Dfa

    *) Replaced with 'Either String'

      Swish.HaskellUtils.ErrorM

    *) Un-needed 

      Swish.HaskellRDF.Parse
      Swish.HaskelUtils.AccumulateM
      Swish.HaskellUtils.TestHelpers

  - removed Either String instance from ErrorM

  - should now compile with mtl-2

  - added upper and lower bounds to package dependencies

  - a number of Test executables have been removed, either
    because of a removed module or missing data files.

  - updated Haddock documentation to build

  - added the following flags

      tests   - compile tests or not?
      hpc     - compile tests with -hpc?

  - support for the NTriples format has been added (e.g. the -nt
    flag in Swish)

  - the N3 parser and formatter have been re-written to better
    match the latest specification. Some previously valid N3 files
    will likely no-linger parse since support for constructs like
    'this' and ':-' have been removed.

    The N3 parser does not handle @forAll statements and ignores any
    @forSome statements. It is also slower than the original parser.

    The formatter has been updated to make better use of the '[]', 
    '()' and '{}' syntactic short cuts.

    Strings containing "unexpected" escape combinations - such as \a -
    may not be handled correctluy.

  - change in behavior of Swish command-line tool when given
    invalid arguments as it now errors out if given an invalid
    argument before processing any input.


