This is a draft.

Data encoding is typed.
Data types are preceeding the data and they are encoded using a 8-bit marker.
Data is encoded as big-endian.
The following are the value ranges of the data markers.

0b0XXXXXXX => positive immediate value
0b100XXXXX => ASCII string immediate size
0b1010XXXX => array immediate size
0b1011XXXX => map immediate size
0b110000XX => array
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => flex array
0b110001XX => map
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => flex map
0b110010XX => unsigned integer
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => 64-bit size extension
0b110011XX => signed integer
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => 64-bit size extension
0b110100XX => ASCII string
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => reserved
0b110101XX => binary
        00 => 8-bit size extension
        01 => 16-bit size extension
        10 => 32-bit size extension
        11 => reserved
0b1101100X => reserved
0b1101101X => floating point
         0 => 32-bit floating point
         1 => 64-bit floating point
0b1101110X => boolean
         0 => false
         1 => true
0b11011110 => null
0b11011111 => terminator
0b111XXXXX => negative immediate value
