]> Git — Sourcephile - haskell/symantic-base.git/blob - symantic-base.cabal
doc: update `ChangeLog.md`
[haskell/symantic-base.git] / symantic-base.cabal
1 cabal-version: 3.0
2 name: symantic-base
3 maintainer: mailto:symantic-base@sourcephile.fr
4 bug-reports: https://mails.sourcephile.fr/inbox/symantic-base
5 homepage: https://git.sourcephile.fr/haskell/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
11 -- PVP: +-+------- breaking API changes
12 -- | | +----- non-breaking API additions
13 -- | | | +--- code changes with no API change
14 version: 0.5.0.20221122
15 stability: experimental
16 category: Data Structures
17 synopsis:
18 Basic symantic combinators for Embedded Domain-Specific Languages (EDSL)
19
20 description:
21 This is a work-in-progress collection of basic tagless-final combinators,
22 along with some advanced utilities to exploit them.
23 * @Symantic.Syntaxes.Classes@
24 gathers commonly used tagless-final combinators
25 (the syntax part of symantics).
26 * @Symantic.Syntaxes.Data@ interprets combinators as data constructors
27 enabling to pattern-match on combinators while keeping their extensibility.
28 * @Symantic.Syntaxes.Derive@
29 to give a default value to combinators which avoids boilerplate code
30 when implementing combinators for an interpreter is factorizable.
31 * @Symantic.Syntaxes.ADT@
32 enables to derive reciprocal functions between
33 algebraic data type constructors and @Either@s of tuples.
34 * @Symantic.Syntaxes.CurryN@
35 gathers utilities for currying or uncurrying tuples
36 of size greater or equal to two.
37 * @Symantic.Semantics.SharingObserver@
38 interprets combinators to observe @let@ definitions
39 at the host language level (Haskell),
40 effectively turning infinite values into finite ones,
41 which is useful for example to inspect
42 and optimize recursive grammars.
43 Inspired by Andy Gill's [Type-safe observable sharing in Haskell](https://doi.org/10.1145/1596638.1596653).
44 For an example, see [symantic-parser](https://hackage.haskell.org/package/symantic-parser).
45 * @Symantic.Semantics.Viewer@
46 interprets combinators as human-readable text.
47 * @Symantic.Semantics.Viewer.Fixity@
48 gathers utilities for parsing or viewing
49 infix, prefix and postfix combinators.
50 * @Symantic.Syntaxes.Reader@
51 is an intermediate interpreter enabling to change
52 the syntax combinators using an environment.
53 * @Symantic.Utils.Reify@
54 enables the lifting to any interpreter
55 of any Haskell functions taking as arguments
56 only polymorphic types (possibly constrained)
57 or functions using such types.
58 Inspired by Oleg Kiselyov's [TDPE.hs](http://okmij.org/ftp/tagless-final/course/TDPE.hs).
59
60 build-type: Simple
61 tested-with: GHC ==8.10.4
62 extra-doc-files: ChangeLog.md
63 extra-source-files:
64 .envrc
65 cabal.project
66 flake.lock
67 flake.nix
68 Makefile
69
70 extra-tmp-files:
71
72 source-repository head
73 type: git
74 location: git://git.sourcephile.fr/haskell/symantic-base
75
76 library
77 hs-source-dirs: src
78 exposed-modules:
79 Symantic
80 Symantic.Semantics
81 Symantic.Semantics.Reader
82 Symantic.Semantics.SharingObserver
83 Symantic.Semantics.Viewer
84 Symantic.Semantics.Viewer.Fixity
85 Symantic.Syntaxes
86 Symantic.Syntaxes.ADT
87 Symantic.Syntaxes.Classes
88 Symantic.Syntaxes.CurryN
89 Symantic.Syntaxes.Data
90 Symantic.Syntaxes.Derive
91 Symantic.Syntaxes.Reify
92
93 default-language: Haskell2010
94 default-extensions:
95 NoImplicitPrelude
96 DefaultSignatures
97 FlexibleContexts
98 FlexibleInstances
99 GeneralizedNewtypeDeriving
100 ImportQualifiedPost
101 LambdaCase
102 MultiParamTypeClasses
103 NamedFieldPuns
104 RecordWildCards
105 ScopedTypeVariables
106 TupleSections
107 TypeApplications
108 TypeFamilies
109 TypeOperators
110
111 ghc-options:
112 -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates
113 -Wpartial-fields -fprint-potential-instances
114
115 build-depends:
116 , base >=4.10 && <5
117 , containers
118 , hashable
119 , template-haskell
120 , transformers
121 , unordered-containers