<div dir="ltr">I agree with your comments about $let, which is why I&#39;m reluctant to do so. If no one has any objections, I&#39;ll pull your patch and rename to with. Also, for consistency, I&#39;ll use &lt;- instead of =. In other words:<div>

<br></div><div>$width foo &lt;- bar</div><div>    #{foo}</div><div><br></div><div>Michael<br><br><div class="gmail_quote">On Fri, Apr 8, 2011 at 4:45 PM, Mark Bradley <span dir="ltr">&lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">$with definitely differentiates it from the way that haskell does let<br>
binding and even makes it more obvious about the scoping (with<br>
bindings in languages like python/javascript work this way), even<br>
hinting that it doesn&#39;t to pattern matching.  I&#39;m in favour.<br>
<br>
If we were to implement a $let it would probably have to work on the<br>
current scope otherwise it would confuse, and allow for mutual<br>
recursion perhaps.<br>
<div><div></div><div class="h5"><br>
On Fri, Apr 8, 2011 at 11:40 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt; wrote:<br>
&gt; Hi Mark,<br>
&gt; Do you have an opinion on the naming, i.e. with versus let? Does anyone<br>
&gt; else?<br>
&gt; Michael<br>
&gt;<br>
&gt; On Fri, Apr 8, 2011 at 4:35 PM, Mark Bradley &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; your latest change makes my original patch not work.  I updated the<br>
&gt;&gt; pull request to handle this and deal with the foldable forall problem<br>
&gt;&gt; that arises from piggy backing on the LineForall construct.  It now<br>
&gt;&gt; uses the LineMaybe to the same effect.<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Apr 8, 2011 at 8:08 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; Oh, you weren&#39;t joking, that really is a small patch. I should have<br>
&gt;&gt; &gt; looked<br>
&gt;&gt; &gt; before writing this email. OK, it&#39;s using the inner block approach. I<br>
&gt;&gt; &gt; think<br>
&gt;&gt; &gt; I&#39;m OK including that if we rename it to $with, e.g.:<br>
&gt;&gt; &gt; $with x &lt;- foo bar<br>
&gt;&gt; &gt;     #{x}<br>
&gt;&gt; &gt; Michael<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Fri, Apr 8, 2011 at 1:05 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Fri, Apr 8, 2011 at 2:47 AM, Mark Bradley &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; On Thu, Apr 7, 2011 at 11:22 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt; A few points:<br>
&gt;&gt; &gt;&gt;&gt; &gt; 1) The cost is twofold: making Hamlet more complex from a user<br>
&gt;&gt; &gt;&gt;&gt; &gt; perspective,<br>
&gt;&gt; &gt;&gt;&gt; &gt; and making the codebase more complex. I&#39;m not a fan of either,<br>
&gt;&gt; &gt;&gt;&gt; &gt; unless<br>
&gt;&gt; &gt;&gt;&gt; &gt; it&#39;s<br>
&gt;&gt; &gt;&gt;&gt; &gt; really justified.<br>
&gt;&gt; &gt;&gt;&gt; &gt; 2) I&#39;m not really certain how your example below works as far as<br>
&gt;&gt; &gt;&gt;&gt; &gt; disambiguating Maybe versus [] (i.e., $maybe versus $forall), but if<br>
&gt;&gt; &gt;&gt;&gt; &gt; we&#39;re<br>
&gt;&gt; &gt;&gt;&gt; &gt; willing to go in this direction, you already have $let for free:<br>
&gt;&gt; &gt;&gt;&gt; &gt; $forall foo &lt;- foos<br>
&gt;&gt; &gt;&gt;&gt; &gt;     $forall foobar &lt;- return $ bar foo<br>
&gt;&gt; &gt;&gt;&gt; &gt;         #{foobar}<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; I was really going out there with my suggestions and examples.  The<br>
&gt;&gt; &gt;&gt;&gt; real benefit of a unified approach is that you can extend it to apply<br>
&gt;&gt; &gt;&gt;&gt; to your custom container types.  Making it pretty similar to foldable<br>
&gt;&gt; &gt;&gt;&gt; but with an default behaviour when the data structure is empty.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; Actually, forgetting the rest of the discussion here, I think extending<br>
&gt;&gt; &gt;&gt; $forall to work on any Foldable is a great idea. Any objections?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Also if you already have let for free using forall and return, why not<br>
&gt;&gt; &gt;&gt;&gt; make a sugared version that compiles down to that?<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; I haven&#39;t looked at your patch yet (thank you btw), but my concern is<br>
&gt;&gt; &gt;&gt; that<br>
&gt;&gt; &gt;&gt; introducing $let, the same way it&#39;s used in Haskell, introduces scoping<br>
&gt;&gt; &gt;&gt; issues that we don&#39;t otherwise have. $forall and $maybe already add a<br>
&gt;&gt; &gt;&gt; significant complexity to deal with the bound variable names, but at<br>
&gt;&gt; &gt;&gt; least<br>
&gt;&gt; &gt;&gt; it&#39;s bound for only the inner block. With $let, we would want it to be<br>
&gt;&gt; &gt;&gt; bound<br>
&gt;&gt; &gt;&gt; for the remainder of the block most likely. So we&#39;d have two choices:<br>
&gt;&gt; &gt;&gt; * Implement a whole bunch of complexity defining and implementing new<br>
&gt;&gt; &gt;&gt; scoping rules.<br>
&gt;&gt; &gt;&gt; * Have totally different semantics from Haskell.<br>
&gt;&gt; &gt;&gt; I&#39;m not sure which approach your patch took. But maybe the problem was<br>
&gt;&gt; &gt;&gt; with my choice of name ($let); $with would likely make more sense for<br>
&gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt; inner block approach. But even so, I&#39;m still concerned that this is<br>
&gt;&gt; &gt;&gt; complexity without enough reward.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Here, return would be for the [] instance of Monad. We could also<br>
&gt;&gt; &gt;&gt;&gt; &gt; use<br>
&gt;&gt; &gt;&gt;&gt; &gt; $maybe, using the Maybe instance of Monad.<br>
&gt;&gt; &gt;&gt;&gt; &gt; Michael<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; On Thu, Apr 7, 2011 at 3:46 PM, Mark Bradley &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; On Thu, Apr 7, 2011 at 10:34 PM, Mark Bradley<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; On Thu, Apr 7, 2011 at 7:51 PM, Max Cantor &lt;<a href="mailto:mxcantor@gmail.com">mxcantor@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; put me in the opposed category.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; You can just as easily put:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;  let formId rs = fromMaybe &quot;&quot; $ lookup $...<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; in the haskell function that loads the hamlet file then you just<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; have<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; to put<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;  #{formId rs}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; in the hamlet.  I think adding syntax should be done only when<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; very<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; necessary.  seems like a very small win here at a big cost.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; Where is the cost? Most of the effort would be just glueing<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; together<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; some pieces of existing code. Given that there are already two<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; places<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; where hamlet does variable binding, adding a third will not hurt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; it,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; or perhaps a single more expressive form of variable binding is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; required. Something like monadic bind (&gt;&gt;=) where you can bind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; non-monadic values using the identity monad.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; An example:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; $bind row &lt;- rs<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    $bind formId &lt;- Identity $ fromMaybe &quot;&quot; $ IntMap.lookup $ getInt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &quot;form_id&quot; row<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        &lt;td&gt;#{formId counties}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        &lt;td&gt;#{formId customers}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; It could also be possible to do else cases where it didn&#39;t bind:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; -- list bind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; $bind row &lt;- rs<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    -- identity bind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    $bind formId &lt;- Identity $ fromMaybe &quot;&quot; $ IntMap.lookup $ getInt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &quot;form_id&quot; row<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        &lt;td&gt;#{formId counties}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        &lt;td&gt;#{formId customers}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        -- maybe bind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        $bind someValue &lt;- someMaybeValue<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;            &lt;div&gt;content<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        -- maybe value was Nothing<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        $nobind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;            &lt;div&gt;other content<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    -- not possible with identity bind possible place for<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; error/warning<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    $nobind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;        &lt;div&gt;This should not happen!<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; -- empty list<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; $nobind<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;    &lt;div&gt;i left my content in my other pants<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; yes, if you have a situation where many handlers are calling the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; same<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; hamlet file, there might be some duplication, but then you can<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; always raise<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; the formId function to a top-level function.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; max<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;  On Apr 7, 2011, at 5:15 PM, Michael Snoyman wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I&#39;ve been very hesitant about adding more features to Hamlet,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; especially ones that are already implemented in Haskell. That&#39;s<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; been my<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; reasoning for avoiding any kind of variable definitions until<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; now.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; However,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; this does seem like a compelling use case.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I don&#39;t think it would make sense to limit it to foralls: it<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; makes<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; as<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; much sense in maybes, and I think it would be confusing if it<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; only<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; applied<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; in some cases. As for syntax, how about:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; $forall row &lt;- rs<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;     $let formId = fromMaybe &quot;&quot; $ IntMap.lookup $ getInt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; &quot;form_id&quot;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; row<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;     ...<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I&#39;m not 100% sold on this yet, what does everyone else think?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; One last note: I&#39;m probably going to be announcing a feature<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; freeze on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Yesod 0.8 *very* soon, and making a beta release to Yackage so<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; that people<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; can test. If you have any last-minute input, now&#39;s the time.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I&#39;m<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; planning on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; giving the beta test period about a week, and then releasing to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Hackage.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Michael<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; On Thu, Apr 7, 2011 at 2:57 AM, &lt;<a href="mailto:vagif.verdi@gmail.com">vagif.verdi@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I noticed a pattern that in hamlet $forall i often retrieve the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; same<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; value<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; from a map, Sometimes 3,4 times.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;    $forall row &lt;- rs<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;            &lt;td&gt;&lt;a href=@{FormR (getInt &quot;form_id&quot; row)}&gt;#{getStr<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; &quot;form_name&quot;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; row}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;            &lt;td&gt;#{getStr &quot;docname&quot; row}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;            ...<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;            &lt;td&gt;#{fromMaybe &quot;&quot; (IntMap.lookup (getInt &quot;form_id&quot;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; row)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; counties)}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;            &lt;td&gt;#{fromMaybe &quot;&quot; (IntMap.lookup (getInt &quot;form_id&quot;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; row)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; customers)}<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Would it be possible to allow let statement in forall for often<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; used<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; values ?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Vagif Verdi<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; web-devel mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:web-devel@haskell.org">web-devel@haskell.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; web-devel mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:web-devel@haskell.org">web-devel@haskell.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; web-devel mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="mailto:web-devel@haskell.org">web-devel@haskell.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; -barkmadley<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; sent from an internet enabled device<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; -barkmadley<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; sent from an internet enabled device<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; -barkmadley<br>
&gt;&gt; &gt;&gt;&gt; sent from an internet enabled device<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; -barkmadley<br>
&gt;&gt; sent from an internet enabled device<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
<div><div></div><div class="h5">-barkmadley<br>
sent from an internet enabled device<br>
</div></div></blockquote></div><br></div></div>