rows <- head:row tail:(crlf row)* / ''
`
case Node of
  [] -> [];
  [""] -> [];
  _ ->
    Head = proplists:get_value(head, Node),
    Tail = [R || [_,R] <- proplists:get_value(tail, Node)],
    [Head|Tail]
end
`;

row <- head:field tail:(field_sep field)* / ''
`
case Node of
  [] -> [];
  [""] -> [];
  _ ->
    Head = proplists:get_value(head, Node),
    Tail = [F || [_,F] <- proplists:get_value(tail, Node)],
    [Head|Tail]
end
`;
field <- quoted_field / (!field_sep !crlf .)* `iolist_to_binary(Node)`;
quoted_field <- '"' string:('""' / (!'"' .))* '"'
`
  String = proplists:get_value(string, Node),
  re:replace(String, "[\"]{2}", "\"",[global, {return, binary}])
`;
field_sep <- ',' ~;
crlf <- [\r]? [\n] ~;
