Functorrent can be build with Cabal sandbox or Nix.
Sandboxes give you per project independent containers, just like Python's virtualenv.
$ git clone https://github.com/vu3rdd/functorrent && cd functorrent
$ cabal sandbox init
$ cabal update
$ cabal install --only-dependencies --enable-tests
$ cabal build # binaries in ./dist/built/functorrent/*
``$ nix-shell``` at the root of the source code repo should drop you into a shell which has all the package dependencies installed.
$ nix-shell --pure
[...]
[nix-shell] $ cabal configure && cabal build
- Optimized for Fun. (should have called it "funtorrent")
- Become more profient with Haskell.
- Implement something non-trivial with Haskell (crypto, file operations, network operations, concurrency, bit twiddling, DHT).
- Follow the spec (official spec, unofficial spec)
- Easy for newbies like me to read and understand along side the spec.
- doctest and quickcheck tests.
- Follow Haskell Style Guide - https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md
- can decode torrent files (bencoding)
- talk to the tracker and get the peer list
- the `main' program takes a torrent file (in the local file system) as input and prints the {ip,port} for each peer, after talking to the tracker.
- can handshake with the peer.
- peer wire protocol (in progress)
- Test suite.
- Peer protocol (in progress).
- Get the file download working in the simplest possible way.
- Concurrency (threads per peer)
- other advanced features of Bit Torrent (like DHT).