Cleanup a few bad types
authorJaseem Abid <jaseemabid@gmail.com>
Sat, 28 Mar 2015 11:22:02 +0000 (16:52 +0530)
committerJaseem Abid <jaseemabid@gmail.com>
Sat, 28 Mar 2015 11:27:40 +0000 (16:57 +0530)
commit02e7dda4ffa293d3098096635144de3a26fcb124
tree1a38854d8071147fc7b15a29bc76eafa393f7bd6
parent49d38acf8b3198b1cdf50db2c316638cb5eb02b7
Cleanup a few bad types

1. Change type InfoDict from `Map BVal BVal` to `Map String BVal`

The keys are human readable keys like 'name', 'announce' etc and String
is the natural fit. This change also gets rid of a lot of packing
unpacking business.

Example:

    -infoHash :: Map BVal BVal -> ByteString
    -infoHash m = let info = m ! Bstr (pack "info")
    -             in (hash . pack . encode) info
    +infoHash :: InfoDict -> ByteString
    +infoHash m = hash . encode $ (m ! "info")

2. Change type of `encode` from `BVal -> String` to `BVal -> ByteString`

Encoded values might not be ASCII safe in the first place. Also, it
makes sense to be the inverse function of decode. `encode . decode` pair
might be a good candidate for Quickcheck.

Other changes are consequences of the type change. Fixed a bunch of
broken doctests in Bencode.

TIL haskell is kickass for refactoring!
src/FuncTorrent/Bencode.hs
src/FuncTorrent/Metainfo.hs
src/FuncTorrent/Peer.hs
src/FuncTorrent/Tracker.hs
test/Test.hs