Pregunta

Intro:

Si bien la comprobación hacia fuera de snoyman "persistente" biblioteca me encontré con ganas de ghci (u otra herramienta) asistencia en averiguar cosas.

:info de ghci no parece funcionar tan bien con tipo de datos son familias y familias como lo hace con los tipos "simple":

> :info Maybe
data Maybe a = Nothing | Just a     -- Defined in Data.Maybe
...
> :info Persist.Key Potato -- "Key Potato" defined in example below
data family Persist.Key val     -- Defined in Database.Persist
... (no info on the structure/identity of the actual instance)

Uno puede mirar siempre para la instancia en el código fuente, pero a veces puede ser difícil de encontrar, y que pueden estar ocultos en la plantilla-Haskell código generado etc.

Ejemplo de código:

{-# LANGUAGE FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, TypeFamilies, QuasiQuotes #-}

import qualified Database.Persist as Persist
import Database.Persist.Sqlite as PSqlite

PSqlite.persistSqlite [$persist|
Potato
    name String
    isTasty Bool
    luckyNumber Int
    UniqueId name
|]

Lo que está pasando en el ejemplo de código anterior es que la plantilla-Haskell es la generación de código para nosotros aquí. Se requiere que todos las extensiones anteriormente a excepción de QuasiQuotes debido a que el código generado los utiliza.

Me enteré de lo que es Persist.Key Potato haciendo:

-- test.hs:
test = PSqlite.persistSqlite [$persist|
...
-- ghci:
> :l test.hs 
> import Language.Haskell.TH
> import Data.List
> runQ test >>= putStrLn . unlines . filter (isInfixOf "Key Potato") . lines . pprint
    where newtype Database.Persist.Key Potato = PotatoId Int64
type PotatoId = Database.Persist.Key Potato

Pregunta:

¿Hay una manera más fácil para obtener información sobre los casos de las familias y las familias de tipo de datos, utilizando ghci o cualquier otra herramienta?

¿Fue útil?

Solución

¿El -ddump-splices le muestre el código generado TH-en este caso?

De lo contrario, :browse le otorga información sobre los datos de instancias de la familia, aunque no se trata de familias tipo.

Es posible que desee presentar una GHC billete - las miradas de salida :browse destrozados, y uno podría esperar instancias de la familia que los datos se informaron como instancias de clases, por :info.

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