]> Git — Sourcephile - haskell/symantic.git/blob - symantic.cabal
init
[haskell/symantic.git] / symantic.cabal
1 author: Julien Moutinho <julm+symantic@autogeree.net>
2 -- bug-reports: http://doc.autogeree.net/symantic/bugs
3 build-type: Simple
4 cabal-version: >= 1.10
5 category: Language
6 -- data-dir: data
7 -- data-files:
8 description:
9 Library gathering main ideas from the
10 <http://okmij.org/ftp/tagless-final/ Tagless-Final>
11 approach of embedded DSL (Domain-Specific Language)
12 developed by Jacques Carette, Oleg Kiselyov and Chung-chieh Shan,
13 and pursuing their work to make it usable as a non-embedded DSL.
14 .
15 A so-called /symantic/ type class defines a /syntax/
16 and each of its instances defines a new /semantic/
17 (computing a Haskell term, serializing, optimizing, …).
18 .
19 Combining the methods of those /symantic/ type classes
20 gives rise to a DSL within which one can
21 write /symantic/ expressions at developing time;
22 but in order to handle such expression when entered by an end-user,
23 one has to be able to construct it at runtime.
24 .
25 This library (including its Test.hs files) demonstrates this
26 for a few usual types and methods, by:
27 .
28 * Parsing a /symantic/ expression
29 from an AST (Abstract Syntax Tree).
30 .
31 * Removing or adding /symantic/ parsers
32 by fully reusing old parsers
33 (i.e. without copying or altering them).
34 .
35 * Interpreting a /symantic/ expression
36 multiple times and with different interpreters
37 without reparsing the expression.
38 .
39 Hence, one can select all or a few expressions (and associated types)
40 of this library, add its own, parse them at runtime from its own AST,
41 and then interpret them at will.
42 .
43 One important drawback of this flexibility
44 is the introduction of a lot of type constraints,
45 so far this hasn't discouraged me… because for this
46 reading the vertically-aligned source code is easier
47 than its Haddock rendition.
48 .
49 Your comments, problem reports, or questions are very welcome! :-)
50 .
51 NOTE: alternative libraries to do more or less the same things
52 include: <https://hackage.haskell.org/package/syntactic syntactic>.
53 extra-source-files:
54 extra-tmp-files:
55 -- homepage: http://pad.autogeree.net/informatique/symantic/
56 license: GPL-3
57 license-file: COPYING
58 maintainer: Julien Moutinho <julm+symantic@autogeree.net>
59 name: symantic
60 stability: experimental
61 synopsis: Library for Typed Tagless-Final Higher-Order Extensible DSL
62 tested-with: GHC==7.10.3
63 version: 1.20161008
64
65 Source-Repository head
66 location: git://git.autogeree.net/symantic
67 type: git
68
69 Flag dev
70 Default: False
71 Description: Turn on development settings.
72 Manual: True
73
74 Flag dump
75 Default: False
76 Description: Dump some intermediate files.
77 Manual: True
78
79 Flag prof
80 Default: False
81 Description: Turn on profiling settings.
82 Manual: True
83
84 Flag threaded
85 Default: False
86 Description: Enable threads.
87 Manual: True
88
89 Library
90 default-extensions:
91 ghc-options: -Wall -fno-warn-tabs
92 if flag(dev)
93 cpp-options: -DDEVELOPMENT
94 ghc-options:
95 -- -ddump-splices
96 -- -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures
97 -- -fno-warn-type-defaults -fno-warn-orphans
98 if flag(dump)
99 ghc-options: -ddump-simpl -ddump-stg -ddump-to-file
100 if flag(prof)
101 cpp-options: -DPROFILING
102 ghc-options: -fprof-auto
103 default-language: Haskell2010
104 exposed-modules:
105 Language.Symantic
106 Language.Symantic.Expr
107 Language.Symantic.Expr.Alt
108 Language.Symantic.Expr.Applicative
109 Language.Symantic.Expr.Bool
110 Language.Symantic.Expr.Eq
111 Language.Symantic.Expr.Error
112 Language.Symantic.Expr.From
113 Language.Symantic.Expr.Functor
114 Language.Symantic.Expr.If
115 Language.Symantic.Expr.Int
116 Language.Symantic.Expr.Lambda
117 Language.Symantic.Expr.List
118 Language.Symantic.Expr.Map
119 Language.Symantic.Expr.Maybe
120 Language.Symantic.Expr.Ord
121 Language.Symantic.Expr.Root
122 Language.Symantic.Expr.Tuple
123 Language.Symantic.Lib.Control.Monad
124 Language.Symantic.Lib.Data.Bool
125 Language.Symantic.Lib.Data.Peano
126 Language.Symantic.Repr
127 Language.Symantic.Repr.Dup
128 Language.Symantic.Repr.Host
129 Language.Symantic.Repr.Text
130 Language.Symantic.Trans
131 Language.Symantic.Trans.Bool
132 Language.Symantic.Trans.Bool.Const
133 Language.Symantic.Trans.Common
134 Language.Symantic.Type
135 Language.Symantic.Type.Alt
136 Language.Symantic.Type.Bool
137 Language.Symantic.Type.Error
138 Language.Symantic.Type.Fun
139 Language.Symantic.Type.Int
140 Language.Symantic.Type.List
141 Language.Symantic.Type.Map
142 Language.Symantic.Type.Maybe
143 Language.Symantic.Type.Ordering
144 Language.Symantic.Type.Root
145 Language.Symantic.Type.Tuple
146 Language.Symantic.Type.Type0
147 Language.Symantic.Type.Type1
148 Language.Symantic.Type.Type2
149 Language.Symantic.Type.Unit
150 Language.Symantic.Type.Var
151 build-depends:
152 base >= 4.6 && < 5
153 , containers
154 , ghc-prim
155 -- , monad-classes >= 0.3.1.1
156 , transformers
157 , text
158
159 Test-Suite symantic-test
160 type: exitcode-stdio-1.0
161 default-extensions:
162 OverloadedStrings
163 default-language: Haskell2010
164 ghc-options: -Wall -fno-warn-tabs
165 -main-is Test
166 hs-source-dirs: Language/Symantic
167 main-is: Test.hs
168 other-modules:
169 AST.Test
170 Expr.Bool.Test
171 Expr.Eq.Test
172 Expr.Functor.Test
173 Expr.If.Test
174 Expr.Int.Test
175 Expr.Lambda.Test
176 Expr.List.Test
177 Expr.Maybe.Test
178 Expr.Test
179 Repr.Host.Test
180 Repr.Test
181 Repr.Text.Test
182 Trans.Bool.Const.Test
183 Trans.Bool.Test
184 Trans.Test
185 Type.Test
186 if flag(threaded)
187 ghc-options: -threaded -rtsopts -with-rtsopts=-N
188 if flag(dev)
189 cpp-options: -DDEVELOPMENT
190 ghc-options:
191 if flag(prof)
192 cpp-options: -DPROFILING
193 ghc-options: -fprof-auto
194 build-depends:
195 base >= 4.6 && < 5
196 , transformers
197 , tasty >= 0.11
198 , tasty-hunit
199 , text
200 , symantic