Получите все функции/значения в области действия с помощью шаблона haskell

Есть ли способ с помощью шаблона haskell перечислить все функции в области видимости? Что-то типа

allVarsInScope :: Q [Name]

Что я пытаюсь сделать с этим, так это получить список всех импортированных функций, начинающихся с test_, и запустить тесты автоматически.


person Clark Gaebel    schedule 02.08.2012    source источник
comment
Test.QuickCheck.All в случае, если ваши тесты являются свойствами QuickCheck.   -  person Daniel Wagner    schedule 02.08.2012
comment
Он не пересекает границы модуля.   -  person Clark Gaebel    schedule 02.08.2012
comment
Для автоматического запуска теста см. проект HTF. Он делает довольно удивительные вещи.   -  person Nikita Volkov    schedule 30.10.2013


Ответы (1)


К сожалению, в Template Haskell нет такой возможности отражения, но есть обходные пути. Однако, прежде чем писать что-то подобное самостоятельно, я рекомендую попробовать test-framework-th который уже делает это для тестов HUnit, начинающихся с case_, а также для свойств QuickCheck, начинающихся с prop_.

Под капотом этот пакет использует пакет language-haskell-extract, который, по сути, запускает его собственный синтаксический анализ модуля для выбора определений. Это несколько хакерское решение, но на практике оно работает достаточно хорошо. Тем не менее, это приводит к значительному количеству зависимостей, а дополнительный проход синтаксического анализа может замедлить ваши сборки.

person hammar    schedule 02.08.2012
comment
Если бы я мог помочь, я бы не стал повторно анализировать каждый модуль с тестом во время сборки. - person Clark Gaebel; 02.08.2012