<div dir="auto"><div>Thanks <span style="font-family:sans-serif">Francesco, I will try it</span></div><div dir="auto"><div class="gmail_extra" dir="auto"><br><div class="gmail_quote">8 Haz 2017 16:55 tarihinde "Francesco Ariis" <<a href="mailto:fa-ml@ariis.it">fa-ml@ariis.it</a>> yazdı:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On Thu, Jun 08, 2017 at 04:03:55PM +0300, Mahmoud Murad wrote:<br>
> I have the following problem, I want to randomly generate arithmetic<br>
> expressions based on a number, for example:<br>
> if I have n = 3, then the expression must have 3 operators like this<br>
> (4)*(((3+5)-2)).<br>
<br>
</div>Hello Mahmoud,<br>
    probably not the most flexible and posh solution, but datatypes<br>
would do.<br>
<br>
    data Exp = EInt Integer<br>
             | Sum  Exp Exp<br>
             | Diff Exp Exp<br>
             | Mult Exp Exp<br>
<br>
and then of course you want to write<br>
<br>
    evaluate :: Exp -> Integer<br>
<br>
and<br>
<br>
    write :: Exp -> String<br>
    -- maybe instance Show Exp where<br>
<br>
Once you do that, picking Exp constructors at random should not be<br>
difficult.<br>
<br>
There are other ways to write a DSL like this (using GADTs, tagless<br>
final style, etc.), each of those expands on/solves a specific problem<br>
(extensibility, etc.); but there is no benefit in complicating your code<br>
if you don't need it.<br>
<br>
Does that help?<br>
-F<br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br></div></div></div>