Pregunta

Si tengo un Name En Templatehaskell y quiere averiguar el valor de la variable que nombra, siempre que la variable se declare como literal, ¿se puede hacer esto?

var = "foo"
-- Can `contentsOf` be defined?
$((contentsOf . mkName $ "var") >>= guard . (== "foo"))
¿Fue útil?

Solución

En teoría, sí. En la práctica, no.

Descubrir cosas sobre los nombres existentes se termina utilizando reify :: Name -> Q Info, y para una definición como esa, recuperarías un VarI valor, que incluye un Maybe Dec campo. Esto parece sugerir que en algunos casos podría obtener el árbol de sintaxis para la declaración de la variable, lo que le permitiría extraer el literal, sin embargo, Las versiones actuales de GHC siempre regresan Nothing en este campo, así que no tienes suerte por una solución pura.

Sin embargo, esto permite que se ejecuten acciones arbitrarias de IO, por lo que podría trabajar alrededor de esto cargando y analizando el módulo usted mismo usando algo como Haskell-Src-ostros, sin embargo, sospecho que eso sería más problemas de lo que vale.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top