@hackage symantic-base0.2.0.20210731

Commonly useful symantics for Embedded Domain-Specific Languages (EDSL)

This is a work-in-progress collection of basic tagless-final combinators, along with some advanced utilities to exploit them.

  • Symantic.Lang gathers commonly used tagless-final combinators (the syntax part of symantics).

  • Symantic.Data is an interpreter enabling to pattern-match on combinators, while keeping their extensibility.

  • Symantic.Derive enables to give a default value to combinators which avoids boilerplate code when implementing combinators for an interpreter is factorizable.

  • Symantic.ObserveSharing enables to observe Haskell let definitions, turning infinite values into finite ones, which is useful to inspect and optimize recursive grammars for example. Inspired by Andy Gill's Type-safe observable sharing in Haskell. For an example, see symantic-parser.

  • Symantic.Reify enables the lifting to any interpreter of any Haskell functions taking as arguments only polymorphic types (possibly constrained) or functions using such types. Inspired by Oleg Kiselyov's TDPE.hs.

  • Symantic.View is an interpreter enabling to turn combinators into a human-readable string.

  • Symantic.ADT enables to derive reciprocal functions between data-constructors and Eithers of tuples.

  • Symantic.CurryN gathers utilities for currying or uncurrying tuples of size greater or equal to 2.

  • Symantic.Fixity gathers utilities for parsing or viewing infix, prefix and postfix combinators.