如何解决列表中的haskell加载模块
| 嘿,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过滤给定的列表。
为了做到这一点,我要么想检查源文件(?)中的书面类型签名,要么要检查编译器(?)给出的推断类型。
我想到的另一个问题是:并非源文件中编写的每个函数都可以导出吗?
这是Haskell初学者在学习5个月后应该尝试解决的问题-经过所有这些“编译时思考”之后,我的大脑就像克莱因的瓶子一样形状。
解决方法
为此,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\")]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。