basesystems =========== This project code contains for Encoding/Decoding number basesystems in Haskell. It's implemented in a strategy pattern style where `BaseSystem` is a type-class which provides the `encoder` and `decoder` methods: ```haskell class BaseSystem a where encoder :: a -> ByteString -> String decoder :: a -> String -> Maybe ByteString ``` Then we define data structure representations for `a` and implement each method with the data from `a`. For instance, this is how the implementations of base64 and base10 are distinguished. Example ------- ```haskell ghci> import Data.BaseSystem ghci> import Data.BaseSystems ghci> import Data.BaseSystem.Internal (packInteger) ghci> ghci> encoder base10 (packInteger 123) -- "123" ghci> decoder base10 "123" -- Just <123 as binary in ByteString> ghci> encoder base64 (packInteger 123) -- "ew==" ghci> decoder base64 "ew==" -- Just <123 as binary in ByteString> ``` Coverage -------- This project aims to eventually implement most if not all of the [mulitbase specification's basesytems list]( https://github.com/multiformats/multibase?tab=readme-ov-file#multibase-table). Currently, the following basesystems are supported: - base2 - base10 - base16(upper/lower) - base32(upper/lower) w/pad + nopad - base32hex(lower/upper) w/pad + nopad - base58btc - base64 w/pad + nopad - base64url w/pad + nopad Unit testing can be found in the main ipfshs repo ([https://git.sr.ht/~z0/ipfshs](https://git.sr.ht/~z0/ipfshs)), and bugs can be reported to the ipfshs ticket tracker ([https://todo.sr.ht/~z0/ipfshs](https://todo.sr.ht/~z0/ipfshs)). License ------- This project is free software and is provided under the BSD 3-clause licensing agreement. Copyright (C) 2026 Zoey McBride <[zoeymcbride@mailbox.org](mailto:zoeymcbride@mailbox.org)>