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