1 author: Julien Moutinho <julm+symantic@autogeree.net>
2 -- bug-reports: http://doc.autogeree.net/symantic/bugs
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.
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, …).
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.
25 This library (including its Test.hs files) demonstrates this
26 for a few usual types and methods, by:
28 * Parsing a /symantic/ expression
29 from an AST (Abstract Syntax Tree).
31 * Removing or adding /symantic/ parsers
32 by fully reusing old parsers
33 (i.e. without copying or altering them).
35 * Interpreting a /symantic/ expression
36 multiple times and with different interpreters
37 without reparsing the expression.
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.
43 Your comments, problem reports, or questions are very welcome! :-)
45 NOTE: alternative libraries to do more or less the same things
46 include: <https://hackage.haskell.org/package/syntactic syntactic>.
49 -- homepage: http://pad.autogeree.net/informatique/symantic/
52 maintainer: Julien Moutinho <julm+symantic@autogeree.net>
54 stability: experimental
55 synopsis: Library for Typed Tagless-Final Higher-Order Extensible DSL
56 tested-with: GHC==7.10.3
59 Source-Repository head
60 location: git://git.autogeree.net/symantic
65 Description: Turn on development settings.
70 Description: Dump some intermediate files.
75 Description: Turn on profiling settings.
80 Description: Enable threads.
85 ghc-options: -Wall -fno-warn-tabs
87 cpp-options: -DDEVELOPMENT
90 -- -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures
91 -- -fno-warn-type-defaults -fno-warn-orphans
93 ghc-options: -ddump-simpl -ddump-stg -ddump-to-file
95 cpp-options: -DPROFILING
96 ghc-options: -fprof-auto
97 default-language: Haskell2010
100 Language.Symantic.Expr
101 Language.Symantic.Expr.Applicative
102 Language.Symantic.Expr.Bool
103 Language.Symantic.Expr.Common
104 Language.Symantic.Expr.Eq
105 Language.Symantic.Expr.Functor
106 Language.Symantic.Expr.If
107 Language.Symantic.Expr.Int
108 Language.Symantic.Expr.Lambda
109 Language.Symantic.Expr.List
110 Language.Symantic.Expr.Map
111 Language.Symantic.Expr.Maybe
112 Language.Symantic.Expr.Ord
113 Language.Symantic.Expr.Tuple
114 Language.Symantic.Lib.Control.Monad
115 Language.Symantic.Lib.Data.Peano
116 Language.Symantic.Repr
117 Language.Symantic.Repr.Dup
118 Language.Symantic.Repr.Host
119 Language.Symantic.Repr.Text
120 Language.Symantic.Trans
121 Language.Symantic.Trans.Bool
122 Language.Symantic.Trans.Bool.Const
123 Language.Symantic.Trans.Common
124 Language.Symantic.Type
125 Language.Symantic.Type.Bool
126 Language.Symantic.Type.Common
127 Language.Symantic.Type.Fun
128 Language.Symantic.Type.Int
129 Language.Symantic.Type.List
130 Language.Symantic.Type.Map
131 Language.Symantic.Type.Maybe
132 Language.Symantic.Type.Ordering
133 Language.Symantic.Type.Tuple
134 Language.Symantic.Type.Unit
135 Language.Symantic.Type.Var
140 -- , monad-classes >= 0.3.1.1
144 Test-Suite symantic-test
145 type: exitcode-stdio-1.0
148 default-language: Haskell2010
149 ghc-options: -Wall -fno-warn-tabs
151 hs-source-dirs: Language/Symantic
167 Trans.Bool.Const.Test
172 ghc-options: -threaded -rtsopts -with-rtsopts=-N
174 cpp-options: -DDEVELOPMENT
177 cpp-options: -DPROFILING
178 ghc-options: -fprof-auto