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