модуль загрузки haskell в списке - PullRequest
4 голосов
/ 12 июня 2011

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

checkRules :: [Nucleotide] -> Bool
checkRules nucs = or $ map ($ nucs) [checkRule1, checkRule2]

Я импортирую checkRule1 и checkRule2 из отдельного модуля - я не знаю, понадобится ли мне их больше в будущем.

я бы хотел, чтобы такая же функциональность выглядела как

-- import all functions from Rules as rules where
-- :t rules ~~> [([Nucleotide] -> Bool)]

checkRules :: [Nucleotide] -> Bool
checkRules nucs = or $ map ($ nucs) rules

программа сортирует псевдонуклеотидные последовательности по жизнеспособным и нежизнеспособным последовательностям в соответствии с заданными правилами. заранее спасибо ε / 2


Приложение: Так что я думаю правильно - мне нужно:

genList :: File -> TypeSignature -> [TypeSignature]
chckfun :: (a->b) -> TypeSignature -> Bool

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

  • Для того, чтобы сделать это, я либо хочу проверить подписанные подписи типов в исходном файле (?) Или типы, определяемые компилятором (?).
  • Другая проблема, которая приходит мне в голову: не каждая функция, записанная в исходном файле, может быть экспортирована?

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

1 Ответ

6 голосов
/ 13 июня 2011

В Hackage есть хороший пакет только для этого: language-haskell-extract .В частности, функция Template Haskell functionExtractor принимает регулярное выражение и возвращает список соответствующих привязок верхнего уровня в виде пар (name, value).Пока все они имеют совпадающие типы, вы можете идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...