<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I think I can provide answers to those questions, based on what I
      have seen in the ecosystem so far:<br>
    </p>
    <p>> Why put this typeclass in this source file and not that<br>
      one?<br>
      <br>
      As you may know, modules can export other modules they depend on,
      but I would advise to put the typeclass definition in its own
      .Class module, such as <a moz-do-not-send="true"
href="https://hackage.haskell.org/package/base-4.15.0.0/docs/Control-Monad-IO-Class.html">Control.Monad.IO.Class</a>.</p>
    <p><br>
    </p>
    <p>> Should I put all my type signatures, typeclasses and data<br>
      structures at the top? At the bottom? Should I put them in a
      separate<br>
      source file?<br>
      <br>
      Here is the layout I have seen most used:<br>
      <br>
      module <br>
        ( export1<br>
        , export2<br>
        ) where</p>
    <p>imports <br>
      <br>
      data types<br>
      instances<br>
      type aliases<br>
      newtypes<br>
      instances<br>
      <br>
      functions (main API)<br>
      <br>
      functions (helpers)<br>
      <br>
      More generally at the project level, make sure you have a tree
      with few chokepoints. I encourage you to read this article
      <a class="moz-txt-link-freetext" href="https://www.parsonsmatt.org/2019/11/27/keeping_compilation_fast.html">https://www.parsonsmatt.org/2019/11/27/keeping_compilation_fast.html</a>.<br>
      <br>
      Cheers.<br>
      <br>
      PS: <br>
      <br>
      > I can read and reuse my own code 30 years from now and not
      have to think about how much I hate past me.<br>
      <br>
      This is bound to happen whether or not you have a strong &
      enforced formatting style. We simply grow up as programmers with
      time. <br>
    </p>
    <div class="moz-cite-prefix">Le 12/08/2021 à 00:27, Christopher
      Conforti a écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:20210811182746.02e5ec71@ccc-pc.confortihome.net">
      <pre class="moz-quote-pre" wrap="">On Sun, 8 Aug 2021 08:50:24 +0200
Hécate <a class="moz-txt-link-rfc2396E" href="mailto:hecate@glitchbra.in"><hecate@glitchbra.in></a> wrote:

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">On my end, I make use of automated style formatters, so that this
kind of thing can be kept consistent during CI. I invite you not to
think too much about the micro-details of code styles, but rather
find a tool that you can configure so that your style can be enforced
automatically. You'll be able to spend more cycles on programme
development.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Indeed, this is the direction I'm heading. However, I'm doing it by
hand first so I can refine my methods to a point I'm satisfied with,
and then build the automation afterwards, hopefully doing it right the
first time. I place value on this because I plan to stick with the same
style throughout all my code so that I can read and reuse my own code 30
years from now and not have to think about how much I hate past me.

The sort of information I'm after answers questions similar to and
including, "Why put this typeclass in this source file and not that
one?" and "Should I put all my type signatures, typeclasses and data
structures at the top? At the bottom? Should I put them in a separate
source file?"

Having outside perspectives from actual people that I'm having
conversations with will help me both learn the finer points of the
topic (from actual programmers) and piece together a strategy I'm happy
with.

On Sun, 8 Aug 2021 08:50:24 +0200
Hécate <a class="moz-txt-link-rfc2396E" href="mailto:hecate@glitchbra.in"><hecate@glitchbra.in></a> wrote:
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">Note that:

  * Type variables are made explicit, and as such I annotate even the
    simplest of them (with `:: Type`)
  * I align the separators (., => and ->)
  * I use stylish-haskell & hlint
  * If you want finer automated control, try something like Britanny.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Your code is a pleasure to read; I shall enjoy studying it. :-)

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Hécate ✨
🐦: @TechnoEmpress
IRC: Hecate
WWW: <a class="moz-txt-link-freetext" href="https://glitchbra.in">https://glitchbra.in</a>
RUN: BSD</pre>
  </body>
</html>