3 maintainer: mailto:~julm/symantic-base@todo.code.sourcephile.fr
4 bug-reports: https://todo.code.sourcephile.fr/~julm/symantic-base
5 homepage: https://git.code.sourcephile.fr/~julm/symantic-base
6 author: Julien Moutinho <julm+symantic-base@sourcephile.fr>
7 copyright: Julien Moutinho <julm+symantic-base@sourcephile.fr>
8 license: AGPL-3.0-or-later
9 license-file: LICENSES/AGPL-3.0-or-later.txt
10 -- PVP: +-+------- breaking API changes
11 -- | | +----- non-breaking API additions
12 -- | | | +--- code changes with no API change
13 version: 0.4.0.20211106
14 stability: experimental
15 category: Data Structures
16 synopsis: Basic symantic combinators for Embedded Domain-Specific Languages (EDSL)
18 This is a work-in-progress collection of basic tagless-final combinators,
19 along with some advanced utilities to exploit them.
22 gathers commonly used tagless-final combinators
23 (the syntax part of symantics).
24 * @Symantic.Data@ interprets combinators as data constructors
25 enabling to pattern-match on combinators while keeping their extensibility.
27 to give a default value to combinators which avoids boilerplate code
28 when implementing combinators for an interpreter is factorizable.
29 * @Symantic.SharingObserver@
30 interprets combinators to observe @let@ definitions at the host language level (Haskell),
31 effectively turning infinite values into finite ones,
32 which is useful for example to inspect and optimize recursive grammars.
33 Inspired by Andy Gill's [Type-safe observable sharing in Haskell](https://doi.org/10.1145/1596638.1596653).
34 For an example, see [symantic-parser](https://hackage.haskell.org/package/symantic-parser).
36 enables the lifting to any interpreter
37 of any Haskell functions taking as arguments
38 only polymorphic types (possibly constrained)
39 or functions using such types.
40 Inspired by Oleg Kiselyov's [TDPE.hs](http://okmij.org/ftp/tagless-final/course/TDPE.hs).
42 interprets combinators as human-readable text.
44 enables to derive reciprocal functions between
45 algebraic data type constructors and @Either@s of tuples.
47 gathers utilities for currying or uncurrying tuples
48 of size greater or equal to two.
50 gathers utilities for parsing or viewing
51 infix, prefix and postfix combinators.
53 tested-with: GHC==8.10.4
64 source-repository head
66 location: https://git.code.sourcephile.fr/~julm/symantic-base
80 Symantic.SharingObserver
82 default-language: Haskell2010
87 GeneralizedNewtypeDeriving
100 -Wincomplete-uni-patterns
101 -Wincomplete-record-updates
103 -fprint-potential-instances