4

Item以下を含むという名前のモジュールがあるとします。

module Item
  ( routes ) where
routes = ["test1","test2","test3"]

Mainモジュールには次のものがあります。

import qualified Item as I
routes = I.routes ++ ["test4", "test5"]

コンパイル時にghc、インポートされたすべてのモジュールを動的に通過させ、routes という名前の変数をエクスポートする場合は、それをモジュール内の routes 変数に追加することが可能かどうか疑問に思っていましたMain。したがって、基本的には次のようなものです。

import qualified Item as I
import qualified User as U --this one exports routes also
import qualified NoRoutes as NR --this one doesn't have any routes
routes = ["test4","test5"]

コンパイルすると、最終結果は次のようになりますroutes = I.routes ++ U.routes ++ ["test4","test5"]

Template Haskell がそのようなことを行うかどうかはわかりません。ご協力いただきありがとうございます!

4

1 に答える 1

6

テンプレートHaskellはおそらくこれを行う最も簡単な方法でしょう。

THを使用すると、「モジュールXはYという名前の何かをエクスポートしますか?」などのコンパイラーの質問をすることができます。また、コードを自動生成して、すべてのルートを一緒に追加することができます。

別の方法は、Haskellソースコードを読み取り、メインモジュールを含むテキストファイルを出力するHaskellプログラムを作成することです。すべてのモジュールがかなり特定の方法で定義されていない限り、これは非常に注意が必要routesです(たとえば、存在する場合は常に5行目にあります)。THはおそらくはるかに簡単でしょう。

于 2013-01-03T19:37:44.413 に答える