嘿haskellers和haskellettes,是否可以在列表中加载模块函数.在我的具体情况下,我有一个功能列表,所有功能都检查或
checkRules :: [Nucleotide] -> Bool
checkRules nucs = or $ map ($ nucs) [checkRule1, checkRule2]
Run Code Online (Sandbox Code Playgroud)
我从一个单独的模块导入checkRule1和checkRule2 - 我不知道将来是否需要更多它们.
我希望有相同的功能看起来像
-- import all functions from Rules as rules where
-- :t rules ~~> [([Nucleotide] -> Bool)]
checkRules :: [Nucleotide] -> Bool
checkRules nucs = or $ map ($ nucs) rules
Run Code Online (Sandbox Code Playgroud)
该程序根据给定的规则对存活和不存活的序列中的伪核苷酸序列进行分类.提前谢谢ε/ 2
附录:我认为是对的 - 我需要:
genList :: File -> TypeSignature -> [TypeSignature]
chckfun :: (a->b) -> TypeSignature -> Bool
Run Code Online (Sandbox Code Playgroud)
在编译时.但是我无法生成模块中所有函数的列表 - 因为它们很可能没有相同的类型签名,因此不能全部放在一个列表中.所以我不能用chckfun过滤给定的列表.
我想到的另一个问题是:并非源文件中编写的每个函数都可能被导出?
这是一个问题,一个haskell初学者应该尝试解决5个月的学习后 - 在所有这些"编译时思考"之后,我的大脑形状像一个klein的瓶子.
Hackage上有一个很好的软件包就是:language-haskell-extract.特别是,Template Haskell函数functionExtractor采用正则表达式,并返回匹配的顶级绑定列表作为(name, value)对.只要它们都有匹配的类型,你就可以去了.
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.Extract
myFoo = "Hello"
myBar = "World"
allMyStuff = $(functionExtractor "^my")
main = print allMyStuff
Run Code Online (Sandbox Code Playgroud)
输出:
[("myFoo", "Hello"), ("myBar", "World")]
Run Code Online (Sandbox Code Playgroud)