Bitdata ======= The ``bitdata`` construct provides a convenient way to break bytes into groups of bits, which are then combined into a tagged union. .. code-block:: DaeDaLus bitdata ChooseOption where opt1 = 0x0 : uint 4 opt2 = 0x1 bitdata OptionData where OptionData = { opt : ChooseOption, val : uint 4 } Bitdata definitions are not parsers, but rather are used by applying coercions to already parsed bytes. The following code parses a byte, and then checks that the first four bits select the correct option. .. code-block:: DaeDaLus block let odat = UInt8 as? OptionData case odat of OptionData x -> case x.opt of opt1 -> ^ x.val _ -> Fail "Wrong option" Note that the coercion may fail if the parsed byte does not contain either ``0x0`` or ``0x1`` in its first four bits. In this case, the parser will backtrack.