[Haskell-cafe] DSLs with {in,}equalities

wren ng thornton wren at freegeek.org
Tue Mar 3 01:53:44 EST 2009


Andrew Hunter wrote:
> Several times now I've had to define an EDSL for working with
> (vaguely) numeric expressions.  For stuff like 2*X+Y, this is easy,
> looking pretty much like:
> 
>> data Expr = Const Integer | Plus Expr Expr | Times Expr Expr
>>
>> instance Num Expr where
>> fromInterger = Const
>> (+) = Plus
>> (*) = Times
 >
> Does anyone know of a good solution, here?  Are there good
> substitutions for all the six operators that are important
> (<,>,>=,<=,==,/=), that are close enough to be pretty-looking but not
> used for other important modules?


If you're just wanting to build Exprs, then the canonical solution is to 
use ':' as in (:>), (:>=), (:==), (:/=), (:<=), (:<). The colon is 
considered a "capital symbol" and so it's what you use as the first 
letter of symbolic constructors. For symmetry, many folks will ad 
another colon at the end as well.

   > data Expr = Const Integer | Expr :+: Expr | Expr :*: Expr | Expr 
:>: Expr | ...

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list