Я обновляю библиотеку, где я переводил Haskell на другой язык. Прямо сейчас я использую Meta.Parse для чтения в модуле Haskell и возвращаю его TemplateHaskell AST, как описано here.Повторное связывание деревьев в шаблоне Haskell AST's
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю синтаксический анализ, я получаю кучу инфиксных операторов, анализируемых как UInfixE и UInfixP, что означает, что они имеют неразрешенную ассоциативность.
description of the associativity рассказывает о том, как компилятор Haskell решает их.
Мне интересно, есть ли доступная функция, которая может выполнить эту переориентацию на деревьях, которые я получаю от разбора? Я ищу что-то вроде этого:
reassoc :: [Dec] -> [Dec]
Я мог бы написать массивную AST обхода, который делает это, но похоже, что это будет огромное количество шаблонного, и ясно, что функция уже существует в той или иной форме (надеюсь, в форме, которая хорошо сочетается с TH).
Существует ли такая вещь? Есть ли простой способ избавиться от нерешенных инфиксных операторов в AST, которые я получаю от объявлений синтаксического анализа?
РЕДАКТИРОВАТЬ: Даже функция, которая, учитывая имя оператора, могла бы придавать ему приоритет и ассоциативность, была бы очень полезной.