<p>Hello Haskell-CafĂ©,</p>

<p>I am happy to announce the <a href="https://github.com/rudymatela/express">Express</a> library for Haskell.</p>

<p>https://github.com/rudymatela/express</p>

<p>Express allows manipulation of dynamically typed Haskell expressions.  It
is similar to Data.Dynamic but with support for encoding applications and
variables.  It provides an Expr type and over a hundred functions for
building, evaluating, comparing, folding, canonicalizing and matching
Exprs.  <a href="https://hackage.haskell.org/package/express/docs/Data-Express.html">Express' Haddock documentation</a> is pretty comprehensive.</p>

<p>The project <a href="https://github.com/rudymatela/express#readme">README</a> has a few examples showing how to use Express to:</p>

<ul>
<li><p>create heterogeneous lists;</p></li>
<li><p>list valid applications between expressions;</p></li>
<li><p>generalize counterexamples;</p></li>
<li><p>automatically generate test properties.</p></li>
</ul>


<p>This library has its origins as an internal module of <a href="https://github.com/rudymatela/speculate">Speculate</a> and
<a href="https://github.com/rudymatela/extrapolate">Extrapolate</a>, I am now releasing it separetely hoping that it could be
used for other purposes.</p>

<p>To install it, just:</p>

<pre><code>$ cabal update
$ cabal install express
</code></pre>

<p>Then you’re ready to use it:</p>

<pre><code>$ ghci
> import Data.Express
> let true = val True
> :t true
true :: Expr
> print true
True :: Bool
> eval False true
True
</code></pre>

<p>–</p>

<p>Rudy</p>