Domanda

Introduzione:

Mentre il check-out di snoyman "persistente" biblioteca mi sono trovato a voler ghci del (o un altro strumento) assistenza per cercare di capire cose.

:info delle ghci non sembra funzionare come bene con tipo-famiglie e data-famiglie come fa con i tipi di "semplice":

> :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)

Si può sempre cercare l'istanza nel codice sorgente, ma a volte potrebbe essere difficile da trovare e può essere nascosto nella template-Haskell codice generato etc.

Esempio di codice:

{-# 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
|]

Che cosa sta succedendo nel codice di esempio sopra è che Template-Haskell sta generando codice per noi qui. Tutte le estensioni sopra tranne QuasiQuotes sono necessari perché il codice generato li utilizza.

ho scoperto cosa Persist.Key Potato è facendo:

-- 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

Domanda:

C'è un modo più semplice per ottenere informazioni sulle istanze di famiglie e famiglie di tipo di dati, utilizzando ghci o qualsiasi altro strumento?

È stato utile?

Soluzione

non -ddump-splices vi mostrerà il codice TH-generato in questo caso?

In caso contrario, :browse ti dà informazioni sulle istanze della famiglia di dati, anche se non si tratta di famiglie tipo.

Si potrebbe desiderare di presentare una GHC biglietto - gli sguardi di uscita :browse alterati, e uno potrebbe aspettare casi familiari dati da comunicare come istanze di classe, da :info.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top