Я пытаюсь реализовать простой парсер в haskell, используя библиотеку parsec
(для учебных целей). Поэтому я написал кучу структур данных и связанных с ними функций, например:
data SourceElement
= StatementSourceElement Statement
| FunctionSourceElement FunctionName FunctionBody
data Statement
= IfStatement Expr Statement Statement
| WhileStatement Expr Statement
data FunctionBody = FunctionBody [SourceElement]
parseSourceElement :: Parser SourceElement
parseSourceElement = ...
parseFunctionBody :: Parser FunctionBody
parseFunctionBody = ...
Это работает нормально. Теперь я хочу разделить этот материал на два модуля, чтобы разделить структуры данных FunctionBody
и Statement
(из-за проблем с читаемостью). Но я не могу! Причина в циклической зависимости между SourceElement
и FunctionBody
.
Итак, есть ли способ решить эту проблему?
data Statement = IfStatement Expr Statement Statement | WhileStatement Expr Statement
и т. д., что на самом деле гарантирует, что вы можете создавать действительные деревья только в большей степени, чем это представление. - person luqui   schedule 12.12.2012