I am parsing a domain specific language which has several type definitions. Primitive types have been relatively straight-forward to parse, but moving on to the complex types in the DSL have proven more challenging. I am looking for a strategy to recursively match a definition that can contain a reference to itself. For example, the map data type can look