質問

私が持っている場合 Name TemplateHaskellで、変数が文字通りと宣言されている場合、名前の変数の値を見つけたいと思います。これは実行できますか?

var = "foo"
-- Can `contentsOf` be defined?
$((contentsOf . mkName $ "var") >>= guard . (== "foo"))
役に立ちましたか?

解決

理論的には、はい。実際には、いいえ。

既存の名前に関するものを見つけることは使用されています reify :: Name -> Q Info, 、そしてそのような定義のためにあなたは戻ってきます VarI 値、aを含む Maybe Dec 分野。これは、変数の宣言のために構文ツリーを取得できる場合があることを示唆しているように思われます。 GHCの現在のバージョンは常に戻ります Nothing この分野で, 、だからあなたは純粋なthソリューションのために運が悪い。

ただし、任意のIOアクションを実行できるようにするため、ようなものを使用してモジュールを自分で読み込んで解析することで、これを回避する可能性があります。 haskell-src-exts, しかし、私はそれが価値があるよりも多くのトラブルになると疑っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top