packages feed

symantic-base-0.5.0.20221211: symantic-base.cabal

cabal-version:      3.0
name:               symantic-base
maintainer:         mailto:symantic-base@sourcephile.fr
bug-reports:        https://mails.sourcephile.fr/inbox/symantic-base
homepage:           https://git.sourcephile.fr/haskell/symantic-base
author:             Julien Moutinho <julm+symantic-base@sourcephile.fr>
copyright:          Julien Moutinho <julm+symantic-base@sourcephile.fr>
license:            AGPL-3.0-or-later
license-file:       LICENSES/AGPL-3.0-or-later.txt

-- PVP:  +-+------- breaking API changes
--       | | +----- non-breaking API additions
--       | | | +--- code changes with no API change
version:            0.5.0.20221211
stability:          experimental
category:           Data Structures
synopsis:
  Basic symantic combinators for Embedded Domain-Specific Languages (EDSL)

description:
  This is a work-in-progress collection of basic tagless-final combinators,
  along with some advanced utilities to exploit them.
  * @Symantic.Syntaxes.Classes@
  gathers commonly used tagless-final combinators
  (the syntax part of symantics).
  * @Symantic.Syntaxes.Data@ interprets combinators as data constructors
  enabling to pattern-match on combinators while keeping their extensibility.
  * @Symantic.Syntaxes.Derive@
  to give a default value to combinators which avoids boilerplate code
  when implementing combinators for an interpreter is factorizable.
  * @Symantic.Syntaxes.EithersOfTuples@
  leverages @GHC.Generics@ to generate reciprocal functions
  between algebraic data type constructors and Eithers-of-Tuples.
  * @Symantic.Syntaxes.TuplesOfFunctions@
  enables the use of Tuples-of-Functions
  instead of Eithers-of-Tuples.
  * @Symantic.Syntaxes.CurryN@
  gathers utilities for currying or uncurrying tuples
  of size greater or equal to two.
  * @Symantic.Semantics.SharingObserver@
  interprets combinators to observe @let@ definitions
  at the host language level (Haskell),
  effectively turning infinite values into finite ones,
  which is useful for example to inspect
  and optimize recursive grammars.
  Inspired by Andy Gill's [Type-safe observable sharing in Haskell](https://doi.org/10.1145/1596638.1596653).
  For an example, see [symantic-parser](https://hackage.haskell.org/package/symantic-parser).
  * @Symantic.Semantics.ToFer@
  interprets combinators to return Tuples-of-Functions
  instead of Eithers-of-Tuples.
  * @Symantic.Semantics.Viewer@
  interprets combinators as human-readable text.
  * @Symantic.Semantics.Viewer.Fixity@
  gathers utilities for parsing or viewing
  infix, prefix and postfix combinators.
  * @Symantic.Syntaxes.Reader@
  is an intermediate interpreter enabling to change
  the syntax combinators using an environment.
  * @Symantic.Utils.Reify@
  enables the lifting to any interpreter
  of any Haskell functions taking as arguments
  only polymorphic types (possibly constrained)
  or functions using such types.
  Inspired by Oleg Kiselyov's [TDPE.hs](http://okmij.org/ftp/tagless-final/course/TDPE.hs).

build-type:         Simple
tested-with:        GHC ==8.10.4
extra-doc-files:    ChangeLog.md
extra-source-files:
  .envrc
  cabal.project
  flake.lock
  flake.nix
  Makefile

extra-tmp-files:

source-repository head
  type:     git
  location: git://git.sourcephile.fr/haskell/symantic-base

library
  hs-source-dirs:     src
  exposed-modules:
    Symantic
    Symantic.Semantics
    Symantic.Semantics.Reader
    Symantic.Semantics.SharingObserver
    Symantic.Semantics.ToFer
    Symantic.Semantics.Viewer
    Symantic.Semantics.Viewer.Fixity
    Symantic.Syntaxes
    Symantic.Syntaxes.Classes
    Symantic.Syntaxes.CurryN
    Symantic.Syntaxes.Data
    Symantic.Syntaxes.Derive
    Symantic.Syntaxes.EithersOfTuples
    Symantic.Syntaxes.Reify
    Symantic.Syntaxes.TuplesOfFunctions

  default-language:   Haskell2010
  default-extensions:
    NoImplicitPrelude
    DefaultSignatures
    FlexibleContexts
    FlexibleInstances
    GeneralizedNewtypeDeriving
    ImportQualifiedPost
    LambdaCase
    MultiParamTypeClasses
    NamedFieldPuns
    RecordWildCards
    ScopedTypeVariables
    TupleSections
    TypeApplications
    TypeFamilies
    TypeOperators

  ghc-options:
    -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates
    -Wpartial-fields -fprint-potential-instances

  build-depends:
    , base                  >=4.10 && <5
    , containers
    , hashable
    , template-haskell
    , transformers
    , unordered-containers