to learn by examples how to use this library.
.
Those @Lib\/*/Test.hs@ files use <https://hackage.haskell.org/package/megaparsec megaparsec> as parser
- and a default grammar somehow sticking to Haskell's,
+ (see @Grammar/Megaparsec.hs@) and a default grammar somehow sticking to Haskell's,
but staying context-free (so in particular: insensitive to the indentation),
and supporting prefix and postfix operators.
This grammar — itself written as a symantic embedded DSL
.
__Main extensions__
.
+ * @ConstraintKinds@ for /type lists/ to contain 'Constraint's,
+ or reifying any 'Constraint' as an explicit dictionary 'Dict',
+ or defining /type synonym/ of /type classes/,
+ or merging /type constraints/.
+ * @DataKinds@ for type-level data structures (eg. /type-level lists/).
+ * @DefaultSignatures@ for providing identity transformations of terms,
+ and thus avoid boilerplate code when a transformation
+ does not need to alter all semantics.
+ Almost as explained in <https://ro-che.info/articles/2016-02-03-finally-tagless-boilerplate Reducing boilerplate in finally tagless style>.
* @GADTs@ for knowing types by pattern-matching terms,
or building terms by using type classes.
+ * @PolyKinds@ for avoiding a lot of uses of 'Proxy'.
* @Rank2Types@ or @ExistentialQuantification@ for parsing @GADT@s.
+ * @TypeApplications@ for having a more concise syntax
+ to build 'Type' (eg. 'tyConst'@ @\@Bool).
+ * @TypeFamilies@ for type-level programming.
* @TypeInType@ (introduced in GHC 8.0.1)
for 'Type' to also bind a kind equality for the type @t@ it encodes.
Which makes the /type application/ ('TyApp')
give us an /arrow kind/ for the Haskell /type constructor/
it applies an Haskell type to, releaving me from tricky workarounds.
- * @ConstraintKinds@ for @cs@ to contain 'Constraint's,
- or defining /type synonym/ of /type classes/,
- or merging /type constraints/.
- * @DataKinds@ for type-level data structures (eg. /type-level lists/).
- * @TypeFamilies@ for type-level programming.
- * @UndecidableInstances@ for type-level programming
- that may never terminate.
- * @PolyKinds@ for avoiding a lot of uses of 'Proxy'.
- * @TypeApplications@ for having a more concise syntax
- to build 'Type' (eg. 'tyConst'@ @\@Bool).
- * @DefaultSignatures@ for providing identity transformations of terms,
- and thus avoid boilerplate code when a transformation
- does not need to alter all semantics.
- Almost as explained in <https://ro-che.info/articles/2016-02-03-finally-tagless-boilerplate Reducing boilerplate in finally tagless style>.
+ * @UndecidableInstances@ for type-level programming that may never terminate.
.
__Bugs__
.
There are some of them hidding in there,
- and the whole thing is far from being perfect!
- Whatever your comments, problem reports, or questions, they are welcome!
+ and the whole thing is far from being perfect…
+ Your comments, problem reports, or questions, are welcome!
You have my email address, so… just send me some emails :]
.
__To do__
and likely some ideas to find too…
* Add more terms in <https://hackage.haskell.org/package/symantic-lib symantic-lib>.
* Add more transformations.
- * Support module imports.
+ * Study how to integrate types into the module system.
* Study where to put @INLINE@, @INLINEABLE@ or @SPECIALIZE@ pragmas.
* Study how to support /rank-N polymorphic types/,
special cases can likely use the /boxed polymorphism/ workaround,
-- PVP: +-+------- breaking API changes
-- | | +----- non-breaking API additions
-- | | | +--- code changes with no API change
-version: 6.0.0.20170611
+version: 6.0.0.20170618
Source-Repository head
location: git://git.autogeree.net/symantic
DefaultSignatures
FlexibleContexts
FlexibleInstances
- InstanceSigs
LambdaCase
MultiParamTypeClasses
NamedFieldPuns
Language.Symantic.Transforming.Beta
Language.Symantic.Transforming.Trans
Language.Symantic.Typing
+ Language.Symantic.Typing.Document
Language.Symantic.Typing.Grammar
Language.Symantic.Typing.Kind
Language.Symantic.Typing.List
, ghc-prim
, mono-traversable
, symantic-grammar
+ , symantic-document
, transformers
, text