В книге yesod есть параграф:

Шаблон Haskell по сути является Haskell, который генерирует абстрактное синтаксическое дерево Haskell (AST).

В TH на самом деле больше возможностей, чем это, поскольку он действительно может анализировать код. Однако мы не используем эти возможности в Йесод.

Что означает интроспекция кода и что вы можете делать с этой функцией?

5
Qwertie 25 Дек 2017 в 17:34

1 ответ

Лучший ответ

Код шаблона Haskell в Yesod используется только для генерации кода. В этом смысле это строгая замена шаблону. Вместо использования Template Haskell мы могли бы вручную написать преобразование из синтаксиса файла маршрута в код, который вы должны написать вручную, и вы могли бы написать эквивалентный код самостоятельно.

С помощью самоанализа вы фактически просматриваете имеющуюся у компилятора информацию и принимаете решения. Например, вы можете найти все экземпляры класса типов Show и создать String с этим списком. Такой подход может быть полезен в некоторых случаях, например, при автоматическом создании набора тестов. Комментарий в книге просто заявляет, что Йесод никогда не делает подобных вещей.

8
Michael Snoyman 25 Дек 2017 в 15:31