> type Terminal                 =  Char
>
> type Result                   =  Maybe
>
> %{
>
> Terminal = 'I'
>          | 'D'
>          | ';'
>          | '|';
>
> root {String};
> root {(xs . ys) []}  : sepBy1' i ';' {xs}, ';', sepBy1' d ';' {ys};
>      {xs []}         | sepBy1' i ';' {xs};
>      {ys []}         | sepBy1' d '|' {ys};
>
> i {Char};
> i {'I'}          : 'I';
>
> d {Char};
> d {'D'}          : 'D';
>
> }%
>
> frown _          = error "syntax error"