       iex> << 1, 2, 3 >>
       << 1, 2, 3 >>
 
-  ## Bitstring types
-
-  A bitstring is made of many segments. Each segment has a
-  type, which defaults to integer:
+  ## Types
+
+  A bitstring is made of many segments and each segment has a
+  type. There are 9 types used in bitstrings:
+
+  - `integer`
+  - `float`
+  - `bits` (alias for bitstring)
+  - `bitstring`
+  - `binary`
+  - `bytes` (alias for binary)
+  - `utf8`
+  - `utf16`
+  - `utf32`
+
+  When no type is specified, the default is `integer`:
 
       iex> <<1, 2, 3>>
       <<1, 2, 3>>

  This syntax reflects the fact the effective size is given by
  multiplying the size by the unit.

  For floats, `size * unit` must result in 32 or 64, corresponding
  to binary32 and binary64, respectively.
  """
  defmacro unquote(:<<>>)(args)


      iex> <<102, rest :: binary>>
      "foo"

  The utf8, utf16, and utf32 types are for unicode codepoints. They
  can also be applied to literal strings and char lists:

      iex> <<"foo" :: utf16>>
      <<0, 102, 0, 111, 0, 111>>
      iex> <<"foo" :: utf32>>
      <<0, 0, 0, 102, 0, 0, 0, 111, 0, 0, 0, 111>>


  ## Options

  Many options can be given by using `-` as separator. Order is
  arbitrary, so the following are all equivalent:

      <<102 :: integer-native, rest :: binary>>
      <<102 :: native-integer, rest :: binary>>
      <<102 :: unsigned-big-integer, rest :: binary>>
      <<102 :: unsigned-big-integer-size(8), rest :: binary>>
      <<102 :: unsigned-big-integer-8, rest :: binary>>
      <<102 :: 8-integer-big-unsigned, rest :: binary>>
      <<102, rest :: binary>>

  ### Unit and Size

  The length of the match is equal to the `unit` (a number of bits) times the
  `size` (the number of repeated segnments of length `unit`).

  Type      | Default Unit
  --------- | ------------
  `integer` | 1 bit
  `float`   | 1 bit
  `binary`  | 8 bits

  Sizes for types are a bit more nuanced. The default size for integers is 8.

  For floats, it is 64. For floats, `size * unit` must result in 32 or 64,
  corresponding to [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point)
  binary32 and binary64, respectively.

  For binaries, the default is the size of the binary. Only the last binary in a
  binary match can use the default size. All others must have their size
  specified explicitly, even if the match is unambiguous.

  For example:

      iex> <<name::binary, " the ", species::binary>>= <<"Frank the Walrus">>
      ** (CompileError): a binary field without size is only allowed at the end of a binary pattern
      iex> <<name::binary-size(5), " the ", species::binary>>= <<"Frank the Walrus">>
      "Frank the Walrus"
      iex> {name, species}
      {"Frank", "Walrus"}

  #### Shortcut Syntax

  Size and unit can also be specified using a syntax shortcut
  when passing integer values:
