Pregunta

Tengo el siguiente código de plantilla Haskell en mi módulo, que es parte de una aplicación más grande.

$(derive makeFoldable ''JStatement)

Sospecho que la instancia generada de plegable no es exactamente lo que originalmente tenía en mente, pero no puedo encontrar una manera de verificar esto. Por lo tanto, preferiblemente usando sólo ghci, es posible ver la instancia generada?

He intentado lo siguiente y consiguió un error de sintaxis y supongo que esto es porque lo estoy haciendo ™ incorrecto.

> derive makeFoldable ''JStatement

<interactive>:1:21:
    lexical error in string/character literal at character '\''
¿Fue útil?

Solución

lo he descubierto. Si pasa -ddump-splices se imprimirá las instancias generadas al terminal al compilar el módulo.

Otros consejos

GHCi informa "lexical error..." porque usted no tiene Plantilla Haskell activadas en su sesión de GHCi. Puede activarlo o bien     pasando -XTemplateHaskell en la línea de comandos     o desde dentro de GHCi sí:

ghci> :set -XTemplateHaskell

Después de la fijación de eso, usted debe conseguir un error en la talla de:

No instance for (Show DecsQ) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it

Ahora, usted tiene varias opciones para imprimir las cosas que están dentro de la mónada Q:

  • Uso -ddump-splices (Como ya se ha señalado en de Deniz Dogan respuesta )

  • Bastante imprimir el código generado a partir de Haskell GHCi sí:

    > putStrLn $(stringE . pprint =<< derive makeFoldable ''JStatement)
    instance Foldable (JStatement ...)
      where foldr ... = ...
    
  • Mostrar la estructura real basado en constructores:

    > putStrLn $(stringE . show =<< derive makeFoldable ''JStatement)
    [InstanceD [] (AppT (ConT Foldable) (... JStatement ...)) [...]]
    

Los dos últimos se podrían simplificar el uso de runQ, pero esto no funciona para la generación de código que utiliza algunas funciones Plantilla Haskell, tales como operaciones reify. Esto incluye algunos (o tal vez más?) Derivaciones del paquete de derivación.

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