Información sobre instancias de la familia de tipo
-
26-09-2019 - |
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?
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
.