<div dir="auto"><div dir="auto" style="font-family:sans-serif"><p><font color="#f44336">So here's a variation which goes to the other extreme. It is completely unsupported right now though:</font></p><p><font color="#f44336"><tt>╶┮▬ Bar/<br></tt><tt><tt> ├─┮▬ Baz/</tt></tt><br><tt><tt><tt><tt> │ </tt></tt></tt></tt><tt><tt><tt><tt><tt><tt>├</tt></tt>─╴ Internals.hs</tt><tt><br></tt></tt> │ ╰─╴ hs</tt><tt><br> </tt></tt><tt><tt><tt>╰</tt></tt>─┮▬ Foo/</tt><br><tt><tt><tt><tt><tt>   </tt></tt></tt></tt><tt><tt><tt><tt><tt><tt>├</tt></tt>─╴ Internals.hs</tt><tt><br></tt></tt></tt></tt>   ╰─╴ hs</tt></font></p><p><tt>You may know this already (and I suspect there are those in your audience who know as well), but this is how Python works, except that your 'hs' files are called '__init__.py' and they're generally required for every directory with Python modules in it (mostly you will find empty ones littered throughout Python projects). You can, of course,  put code in the __init__.py or rexport stuff from the modules to make them available at the level of Bar.Baz, for instance.</tt></p><p>For an extended example, if these were Python modules and you wrote:</p><p>"from bar.baz.internals import some_function"</p><p>The python interpreter would evaluate the top-level declarations within the __init__.py in each directory in order (1. bar, 2.baz) before finally importing from the internals module (at which point it would also execute all top-level declarations there as well.</p></div><div style="font-family:sans-serif" dir="auto">There are some clunky aspects to it and a danger of circular imports which results in all kinds of nonsense, but one thing I like about Python-style imports is that it's pretty much always obvious where things originated from.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Dec 18, 2016 2:29 PM, "MarLinn via Haskell-Cafe" <<a href="mailto:haskell-cafe@haskell.org">haskell-cafe@haskell.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <blockquote type="cite">
      <div dir="ltr">I suppose the real question is, as a language
        standard and a community preference, should this be considered a
        bug? Should people be free to use X.Y.hs or X/Y.hs styles?<br>
      </div>
    </blockquote>
    <br>
    First off all, the support you mention seems to be incomplete, or
    very recent. At least my ghci 7.10 failed to import a module with a
    dot-name. But maybe my quick-and-dirty test was broken…<br>
    <br>
    I'll also add a fun variation to the discussion. Let's say I have
    two modules named <tt>Bar.Foo</tt>, and <tt>Bar.Baz</tt> and
    submodules <tt>Bar.Foo.Internals</tt> and <tt>Bar.Baz.Internals</tt>.
    (eg. for testing purposes) It always bugged me that the usual
    approach would be this:<br>
    <br>
    <tt>╶┮▬ Bar/<br>
    </tt><tt><tt> ├─┮▬ Baz/<br>
         │ ╰─╴  Internals.hs</tt><tt><br>
         </tt>├─┮▬ Foo/<br>
       │ ╰─╴  Internals.hs</tt><tt><br>
    </tt><tt><tt> </tt></tt><tt><tt><tt>├</tt></tt></tt><tt><tt><tt><tt><tt>─</tt></tt></tt>─╴
        Baz.hs</tt><tt><br>
         </tt>╰──╴ Foo.hs<br>
    </tt>
    <p>My gripe is that here related modules are in completely unrelated
      positions. One way to solve it with dot-names would be
    </p>
    <pre><tt>╶┮▬ Bar/</tt><tt><tt>
</tt></tt><tt><tt><tt><tt> ├</tt></tt></tt></tt><tt><tt><tt><tt>─</tt></tt>─╴ Baz.hs</tt> 
</tt><tt><tt> ├──╴ </tt><tt><tt>Baz.</tt>Internals.hs</tt></tt><tt><tt>
 ├──╴ </tt><tt><tt>Foo.</tt>hs</tt></tt><tt>
</tt><tt> ╰──╴ Foo.</tt><tt><tt><tt>Internals.</tt></tt>hs</tt></pre>
    <p>But that can lead to a lot of clutter fast. So here's a variation
      which goes to the other extreme. It is completely unsupported
      right now though:</p>
    <p><tt>╶┮▬ Bar/<br>
      </tt><tt><tt> ├─┮▬ Baz/</tt></tt><br>
      <tt><tt><tt><tt> │ </tt></tt></tt></tt><tt><tt><tt><tt><tt><tt>├</tt></tt>─╴
              Internals.hs</tt><tt><br>
            </tt></tt> │ ╰─╴ hs</tt><tt><br>
           </tt></tt><tt><tt><tt>╰</tt></tt>─┮▬ Foo/</tt><br>
      <tt><tt><tt><tt><tt>   </tt></tt></tt></tt><tt><tt><tt><tt><tt><tt>├</tt></tt>─╴
                Internals.hs</tt><tt><br>
              </tt></tt></tt></tt>   ╰─╴ hs</tt><tt><br>
      </tt></p>
    <p>That <tt>hs</tt> name does look a bit ridiculous, but the idea
      is to have something like an <tt>index.html</tt> without
      reserving a name. If slashes and dots were 100% interchangeable,
      this would be the logical extension. Now related files are in
      related positions. Downside: The <tt>hs</tt> files don't have a
      file extension. (There could be a special case to use <tt>.hs</tt>
      as a special name instead, but that would lead to hidden files and
      break consistency…)<br>
    </p>
    <p>I realize this version probably won't gain much approval, but
      between this and throwing everything and the kitchen sink on the
      top level just because some tools don't offer opened-up nested
      hierarchical views into directory structures – I would choose this
      one, personally. Or maybe a mixture, depending on actual
      structure. But then both options are better than the one with
      unrelated positions, and the dot-name approach might at least be
      one that works right now.</p>
    <p><br>
    </p>
    <p>Cheers,<br>
      MarLinn<br>
    </p>
  </div>

<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.<br></blockquote></div></div>