Construct - это DSL, реализованный на Python, который используется для описания структур данных (двоичных и текстовых). Как только вы определили структуру данных, construct может проанализировать и построить ее для вас. Что хорошо («СУХОЙ», «Декларативный», «Денотационная семантика» ...)
Пример использования:
# code from construct.formats.graphics.png
itxt_info = Struct("itxt_info",
CString("keyword"),
UBInt8("compression_flag"),
compression_method,
CString("language_tag"),
CString("translated_keyword"),
OnDemand(
Field("text",
lambda ctx: ctx._.length - (len(ctx.keyword) +
len(ctx.language_tag) + len(ctx.translated_keyword) + 5),
),
),
)
Мне нужен такой инструмент для Haskell и
Интересно, существует ли что-то подобное?
Я знаю:
- Data.Binary: пользователь выполняет анализ и сборку отдельно
- Parsec: только для разбора? Только для текста?
Я полагаю, что для этого нужно использовать Template Haskell?