I did not expect that, as I am not in your world. Your project would benefit with a better description and context on what this is about and what the use cases are.
Mycelium has some interesting design choices compared to JSON and Protocol Buffers. Everything is built up from Bits, there is a Bit type which contains the values 0 and 1. Bytes are `Array[Bit, 8]` and Strings are `List[Byte]`. A 32 bit integer would be `Array[Bit, 32]`. There are also Sum (Coproduct) types, and cryptographic pointer types (called Refs in Mycelium).
Mycelium can be used to solve the same problems as those technologies. That's sort of table stakes for a serialization format. Mycelium additionally tackles the problem of sending procedures (called Lambdas in Mycelium) over the wire as well. That is a fairly simple feature to explain (get my procedure from here to there, it works with strings why not functions?), but it implies a significant amount of technology including a machine code specification and abstract machine model to execute it.
As for practical applications. Mycelium is suitable to be used as:
- A serialization format for storage and transfer.
- A VM with well controlled access to external resources for applications to run untrusted code.
- The VM can be a compiler target for programming languages. (Spore https://github.com/mycweb/mycelium/tree/master/spore is one such language)
- A format for data structures which need to be cryptographically signed. All Mycelium data structures are Merkle Trees.
- Large data structures which need to be efficiently synced. All Mycelium Values can be synced efficiently by traversing the cryptographic pointers and skipping values which are already available locally.