Native JSON deserialization in Hydra
See also #181. JSON is Hydra's built-in data exchange language. Other languages like Protobuf and Avro are supported in the Hydra extensions, but are not necessary components of a Hydra implementation. The one caveat is that, since Hydra does not contain a parser library, JSON parsing must be done externally in each implementation language. This is OK for now, because there are JSON libraries in every programming language of interest. However, in order to ensure complete parity across all Hydra implementations, Hydra will eventually need to include its own JSON parser and writer. This is not a blocker for the 1.0 release.
Note: even JSON serialization currently requires an external library. In order to serialize JSON ourselves, #172 will need to be completed first. Consider the imports in the current JSON serde module:
import qualified Data.ByteString.Lazy as BS
import qualified Control.Monad as CM
import qualified Data.Aeson as A
import qualified Data.Aeson.KeyMap as AKM
import qualified Data.Aeson.Key as AK
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Text as T
import qualified Data.Vector as V
import qualified Data.Scientific as SC
import qualified Data.Char as C
import qualified Data.String as String