title: What is the up-to-date standard workflow for building Haskell projects?
body: <p>Since things change so fast, I've posted this question so hopefully the community-agreed way to start a Haskell project can be clarified. Imagine I have two separate projects:</p>
  
  <ul>
  <li><p><strong>Project #1</strong>: Square, the library that squares numbers. No deps.</p>
  
  <pre><code>-- Square.hs
  
  module Square where
  
  square :: Num a =&gt; a -&gt; a
  square x = x * x
  </code></pre></li>
  <li><p><strong>Project #2</strong>: Hypotenuse, the library and executable that finds the longest side of a right-angled triangle. Depends on #1:</p>
  
  <pre><code>-- Hypotenuse.hs
  
  module Hypotenuse where
  
  import Square
  
  hypotenuse :: Floating a =&gt; a -&gt; a -&gt; a
  hypotenuse x y = sqrt $ square x + square y
  </code></pre>
  
  <p>,</p>
  
  <pre><code>-- Main.hs
  
  import System.Environment
  import Hypotenuse
  
  main = do
      [x,y] &lt;- fmap (map read) getArgs
      print $ hypotenuse x y
  </code></pre></li>
  </ul>
  
  <p>Starting with a computer with GHC 7.10.2, Stack and Cabal installed, and a single directory, <code>~/OrganizeMe</code>, containing <code>~/OrganizeMe/Square.hs</code>, <code>~/OrganizeMe/Hypotenuse.hs</code> and <code>~/OrganizeMe/Main.hs</code>, as presented above - <strong>what is a complete set of unix commands an experienced Haskeller would use to architect those projects?</strong> That includes:</p>
  
  <ol>
  <li><p>Organizing the directory tree of those projects;</p></li>
  <li><p>configuring <code>Stack</code>/<code>Cabal</code>/<code>etc</code> (and <code>git</code>, optionally);</p></li>
  <li><p>building/installing them locally;</p></li>
  <li><p>publishing to <code>Hackage</code>/<code>Stackage</code>.</p></li>
  </ol>