We have shown how to extend existing types to implement new abstractions with protocols, but what if we want to create a new type in Clojure? That is where datatypes come in.
A datatype provides the following:
A unique class, either named or anonymous
Structure, either explicitly as fields or implicitly as a closure
Fields that can have type hints and can be primitive
Optional implementations of abstract methods specified in protocols or interfaces
Immutability on by default
Unification with maps (via records)
We will use the deftype macro to define a new datatype, called CryptoVault, that will implement two protocols, including IOFactory.
Now that gulp and expectorate support several existing Java classes, let’s create ...