]> Git — Sourcephile - haskell/symantic.git/blob - symantic.cabal
Monad
[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.Either
111 Language.Symantic.Expr.Eq
112 Language.Symantic.Expr.Error
113 Language.Symantic.Expr.From
114 Language.Symantic.Expr.Functor
115 Language.Symantic.Expr.If
116 Language.Symantic.Expr.Int
117 Language.Symantic.Expr.Lambda
118 Language.Symantic.Expr.List
119 Language.Symantic.Expr.Map
120 Language.Symantic.Expr.Maybe
121 Language.Symantic.Expr.Monad
122 Language.Symantic.Expr.Ord
123 Language.Symantic.Expr.Root
124 Language.Symantic.Expr.Traversable
125 Language.Symantic.Expr.Tuple
126 Language.Symantic.Lib.Control.Monad
127 Language.Symantic.Lib.Data.Bool
128 Language.Symantic.Lib.Data.Peano
129 Language.Symantic.Repr
130 Language.Symantic.Repr.Dup
131 Language.Symantic.Repr.Host
132 Language.Symantic.Repr.Text
133 Language.Symantic.Trans
134 Language.Symantic.Trans.Bool
135 Language.Symantic.Trans.Bool.Const
136 Language.Symantic.Trans.Common
137 Language.Symantic.Type
138 Language.Symantic.Type.Alt
139 Language.Symantic.Type.Bool
140 Language.Symantic.Type.Either
141 Language.Symantic.Type.Error
142 Language.Symantic.Type.Fun
143 Language.Symantic.Type.Int
144 Language.Symantic.Type.List
145 Language.Symantic.Type.Map
146 Language.Symantic.Type.Maybe
147 Language.Symantic.Type.Ordering
148 Language.Symantic.Type.Root
149 Language.Symantic.Type.Tuple
150 Language.Symantic.Type.Type0
151 Language.Symantic.Type.Type1
152 Language.Symantic.Type.Type2
153 Language.Symantic.Type.Unit
154 Language.Symantic.Type.Var
155 build-depends:
156 base >= 4.6 && < 5
157 , containers
158 , ghc-prim
159 -- , monad-classes >= 0.3.1.1
160 , transformers
161 , text
162
163 Test-Suite symantic-test
164 type: exitcode-stdio-1.0
165 default-extensions:
166 OverloadedStrings
167 default-language: Haskell2010
168 ghc-options: -Wall -fno-warn-tabs
169 -main-is Test
170 hs-source-dirs: Language/Symantic
171 main-is: Test.hs
172 other-modules:
173 AST.Test
174 Expr.Applicative.Test
175 Expr.Bool.Test
176 Expr.Eq.Test
177 Expr.Functor.Test
178 Expr.If.Test
179 Expr.Int.Test
180 Expr.Lambda.Test
181 Expr.List.Test
182 Expr.Maybe.Test
183 Expr.Monad.Test
184 Expr.Test
185 Expr.Traversable.Test
186 Repr.Host.Test
187 Repr.Test
188 Repr.Text.Test
189 Trans.Bool.Const.Test
190 Trans.Bool.Test
191 Trans.Test
192 Type.Test
193 if flag(threaded)
194 ghc-options: -threaded -rtsopts -with-rtsopts=-N
195 if flag(dev)
196 cpp-options: -DDEVELOPMENT
197 ghc-options:
198 if flag(prof)
199 cpp-options: -DPROFILING
200 ghc-options: -fprof-auto
201 build-depends:
202 base >= 4.6 && < 5
203 , transformers
204 , tasty >= 0.11
205 , tasty-hunit
206 , text
207 , symantic