What I would really like to see is locally scoped imports but with parameterized modules. (so modules could take types and values as parameters)<br>The places where I most want a feature like this is when I have a group of helper functions that need a value that is outside the modules scope, but that in general doesn&#39;t change. Usually we just curry the functions, but that generates a lot of wasted code. <br>
A good example might be the <a href="http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#Lexical%20analysis">token parsers</a> in parsec. Rather than have something like this:<br><pre>whiteSpace= P.<a href="http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#whiteSpace">whiteSpace</a> lexer<br>
lexeme    = P.lexeme lexer<br>symbol    = P.<a href="http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#symbol">symbol</a> lexer<br>natural   = P.<a href="http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#natural">natural</a> lexer<br>
...<br></pre>We could do something like:<br><br>import ParsecToken lexer<br><br>Having an import/module feature like this would replace almost all cases where someone might wish for a macro system for Haskell.<br><br>&gt;&gt; Hmm, looks nice, and sensible. But as soon as you&#39;ve got \N{....} syntax I want:<br>
&gt;&gt;<br>&gt;&gt; &quot;foo\E{show i}bar&quot;<br>
&gt;<br>&gt; &quot;foo&quot;++show i++&quot;bar&quot;<br>
&gt;<br>&gt;Change the language - save two characters.<br><br>For simple cases, doing &quot;foo&quot; ++ show i ++ &quot;bar&quot; isn&#39;t bad at all, but when you have five or six or ten (show i)s that you want to mix in, it can get pretty hard to read.<br>
<br><br><div class="gmail_quote">On Wed, Jan 14, 2009 at 11:43 AM, Ketil Malde <span dir="ltr">&lt;<a href="mailto:ketil@malde.org">ketil@malde.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">&quot;Neil Mitchell&quot; &lt;<a href="mailto:ndmitchell@gmail.com">ndmitchell@gmail.com</a>&gt; writes:<br>
<br>
&gt;&gt; 1) In a Python string it is available the \U{name} escape, where name is<br>
&gt;&gt; &nbsp; a character name in the Unicode database.<br>
<br>
&gt;&gt; &nbsp; As an example:<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; foo = u&quot;abc\N{VULGAR FRACTION ONE HALF}&quot;<br>
<br>
</div>Why not:<br>
<br>
 &nbsp; &nbsp;import Unicode.Entities as U<br>
<br>
 &nbsp; &nbsp;foo = &quot;abc&quot;++U.vulgar_fraction_one_half<br>
<div class="Ih2E3d"><br>
&gt; Hmm, looks nice, and sensible. But as soon as you&#39;ve got \N{....} syntax I want:<br>
&gt;<br>
&gt; &quot;foo\E{show i}bar&quot;<br>
<br>
</div> &nbsp;&quot;foo&quot;++show i++&quot;bar&quot;<br>
<br>
Change the language - save two characters.<br>
<div class="Ih2E3d"><br>
&gt;&gt; 2) In Python it is possible to import modules inside a function.<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; In Haskell something like:<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; joinPath&#39; root name =<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; joinPath [root, name]<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; importing System.FilePath (joinPath)<br>
<br>
</div><div class="Ih2E3d">&gt; It does mean you need to read an entire file to see<br>
<br>
</div>Well, then you might as well allow multiple modules per file as per<br>
the recent discussion. &nbsp;And multi-module files will possibly let you<br>
achieve the desired encapsulation without actually changing the<br>
language.<br>
<br>
-k<br>
<font color="#888888">--<br>
If I haven&#39;t seen further, it is by standing in the footprints of giants<br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>