任意のモジュールがあるとします
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
}
名前は元のモジュールと正確に同じでなければなりません。
これを手動で行うこともできますが、それは非常に面倒なので、このタスクを実行するためのコードを書きたいと思います。
そのようなタスクにアプローチする方法がよくわかりません。Template Haskell はモジュールを検査する方法を提供しますか? GHC api にフックする必要がありますか? それとも、ハドック ページをスクレイピングするなど、よりアドホックなアプローチでうまくいくでしょうか?