Refact

Syntactic refactorisation of the project. It seems that you weren't taught the secret chants to summon the ghosts of Haskell.

Here are some spells:
http://www.haskell.org/hoogle/ (to prevent the fact that you're badly reimplementing built-ins/popular libs)
Here's the same but with more stuff indexed: https://www.fpcomplete.com/hoogle?q=

You also seem to have a great case of put-parenthesis-everywhere. Here's your second spell:
http://community.haskell.org/~ndm/hlint/

Last but certainly not least, I beg thee to stop using tuples everywhere. Whenever you have a type `a -> (b, c) -> d` and the tuple is not somehow vital to your function, a loli dies. Make data structures that describe what you want and center your code around them instead of forcing everything to work an tuples.

I have also added a cabal file:
http://www.haskell.org/cabal/users-guide/

Make sure to change the LICENSE file, or better yet, set the appropriate license in the cabal file.