10
假设我有一个任意模块具体化模块插入记录
module Foo where
foo :: Moo -> Goo
bar :: Car -> Far
baz :: Can -> Haz
其中foo
,bar
和baz
得到正确实施,等等
我想这个模块具体化到自动 - 生成数据类型和相应的对象:
import Foo (Moo, Goo, Car, Far, Can, Haz)
import qualified Foo
data FooModule = Foo
{ foo :: Moo -> Goo
, bar :: Car -> Far
, baz :: Can -> Haz
}
_Foo_ = Foo
{ foo = Foo.foo
, bar = Foo.bar
, baz = Foo.baz
}
名称必须是精确地相同的原始模块。
我可以手工做,但是这是非常繁琐的,所以我想编写一些代码来为我执行此任务。
我真的不知道如何处理这样的任务。模板Haskell提供了一种检查模块的方法吗?我应该钩入一些GHC API吗?还是我只是作为小康与一个更特别的方法如刮黑线鳕的网页?
您可以使用'haskell-src-exts'解析模块源,然后从中创建数据类型并输出新的源文件? – 2012-07-20 02:07:32
哈斯克尔-SRC-EXTS是一个伟大的想法,但解析源不一定足够了。例如,[Data.Map](http://hackage.haskell.org/packages/archive/containers/0.5.0.0/doc/html/src/Data-Map.html)的源代码只是重新导出数据。 Map.Lazy还有一些额外的东西。我需要一个给定的模块实际上出口全部出口的传递闭包。能够提取模块数据而不必检查源代码也是很好的。 – 2012-07-20 03:10:38