Intro:Information sur les instances de type familial
Tout en vérifiant snoyman's "persistent" bibliothèque, je me suis retrouvé vouloir l'aide des années ghci (ou un autre outil) en déterminer des choses.
semblent pour ghci :info
ne pas travailler bien avec le type-familles et les données familles comme il le fait avec les types « simples »:
> :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)
On peut toujours chercher l'exemple dans le code source, mais parfois il peut être difficile de trouver et il peut être caché dans le modèle-code généré haskell etc.
exemple de code:
{-# 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
|]
Qu'est-ce qui se passe dans la Exemple de code ci-dessus est que Template-Haskell génère du code pour nous ici. Toutes les extensions ci-dessus sauf pour QuasiQuotes
sont requises car le code généré les utilise.
Je trouve ce que Persist.Key Potato
est en faisant:
-- 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
Question:
est-il un moyen plus facile d'obtenir des informations sur les cas de familles familles de type et de données, en utilisant ghci ou tout autre outil?
@claus: 10x. ': browse' est génial! '-ddump-splices' montre le code généré par TH. Il s'avère également qu'il est plus agréable que 'pprint' (' 'boo''' vs '[' b ', \ n'o', \ n'o '\ n] 'etc.), pensait' runQ/pprint' La sortie n'est pas seulement déversée, donc je pourrais la filtrer, etc. – yairchu