列表中的haskell加载模块

时间:2011-06-12 16:41:18

标签: haskell module

嘿haskellers和haskellettes, 是否可以在列表中加载模块功能。 在我的具体情况下,我有一个所有功能列表或

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过滤给定列表。

  • 为了做到这一点,我想要检查源文件(?)中的书面类型签名或编译器给出的推理类型(?)。
  • 我想到的另一个问题是:源文件中写的每个函数都不会被导出吗?

  • 这是一个问题,哈斯克尔初学者应该在学习5个月后尝试解决这个问题 - 在所有这些“编译时思考”之后,我的大脑形状就像是一个克莱因的瓶子。

1 个答案:

答案 0 :(得分:6)

Hackage上有一个很好的软件包:language-haskell-extract。特别是,模板Haskell函数functionExtractor采用正则表达式,并返回匹配的顶级绑定列表(name, value)对。只要它们都有匹配类型,你就可以去了。

{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.Extract

myFoo = "Hello"
myBar = "World"

allMyStuff = $(functionExtractor "^my")

main = print allMyStuff

输出:

[("myFoo", "Hello"), ("myBar", "World")]