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