繁体   English   中英

haskell 在列表中加载模块

[英]haskell load module in list

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

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

  • 为了做到这一点,我要么想检查源文件中的书面类型签名(?),要么检查编译器(?)给出的推断类型。
  • 我想到的另一个问题是:不是每个写在源文件中的 function 都可能被导出?

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

在 Hackage 上有一个不错的 package 就是为了这个: language-haskell-extract 特别是,模板 Haskell function functionExtractor采用正则表达式并将匹配的顶级绑定列表作为(name, value)对返回。 只要它们都有匹配的类型,您就可以使用 go。

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

myFoo = "Hello"
myBar = "World"

allMyStuff = $(functionExtractor "^my")

main = print allMyStuff

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM