title: Interfacing with structs and anonymous unions with c2hs
body: <p>How would one go about encoding this chunk of C code in a .chs file so that c2hs can transform it to something relatively nice?</p>
  
  <pre><code>typedef enum {
      MONOME_BUTTON_UP        = 0x00,
      MONOME_BUTTON_DOWN      = 0x01,
      MONOME_ENCODER_DELTA    = 0x02,
      MONOME_ENCODER_KEY_UP   = 0x03,
      MONOME_ENCODER_KEY_DOWN = 0x04,
      MONOME_TILT             = 0x05,
  
      /* update this if you add event types */
      MONOME_EVENT_MAX        = 0x06
  } monome_event_type_t;
  
  typedef struct monome monome_t; /* opaque data type */
  typedef struct monome_event monome_event_t;
  
  typedef void (*monome_event_callback_t)
      (const monome_event_t *event, void *data);
  
  struct monome_event {
      monome_t *monome;
      monome_event_type_t event_type;
  
      /* __extension__ for anonymous unions in gcc */
      __extension__ union {
          struct {
              unsigned int x;
              unsigned int y;
          } grid;
  
          struct {
              unsigned int number;
              int delta;
          } encoder;
  
          struct {
              unsigned int sensor;
              int x;
              int y;
              int z;
          } tilt;
      };
  };
  </code></pre>