variableという名前のTemplateHaskellのリテラル値を取得する方法
-
27-10-2019 - |
質問
私が持っている場合 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, しかし、私はそれが価値があるよりも多くのトラブルになると疑っています。
所属していません StackOverflow