The recommended way of distributing your Haskell projects is to use Cabal. Cabal is both a build system and package manager for Haskell code, and it makes it easy to build Haskell code on different platforms while handling dependencies for you.
Here's an example cabal file:
Name: MyPackage
Version: 0.0
Cabal-Version: >= 1.2
License: BSD3
Author: Angela Author
Synopsis: Small package an utility program
Build-Type: Simple
Executable myutility
Build-Depends: base
Main-Is: Main.hs
Hs-Source-Dirs: src
You can generate a cabal file interactively by running
$ cabal init
Cabal will then ask you some simple questions and generate a cabal file based on your answers. You can then tweak this file to fit your specific needs.
To install your package just run this in the package directory
$ cabal install
You can also upload your package to Hackage, the standard Haskell package respository. This way, people can download and install your package (and any dependencies) in a single step with the command
$ cabal install mypackage
There also exist tools for converting Cabal packages to other package managers, if you don't want to require your users to have Cabal installed (although Cabal is included in the Haskell Platform).
It also plays well with Haddock for generating reference documentation for your package. Check out some of the packages on Hackage for an example of the results.
There is also work currently being done to improve support for test suites in Cabal.
Overall, these reasons and many more make it a great benefit to use Cabal to organize, build and distribute your Haskell projects.