Frage

Intro:

Während Check-out snoyman der "persistent" Bibliothek fand ich mich GHCI (oder ein anderes Werkzeug) Unterstützung wollen in herauszufinden Zeug.

GHCI der :info scheint nicht zu Arbeit als gut mit Typ-Familien und Daten-Familien, da es mit „plain“ Typen tut:

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

Man kann immer für die Instanz Blick in den Quellcode, aber manchmal könnte es schwierig sein, sie zu finden und es kann in der Schablone-haskell generierten Code usw. versteckt werden.

Code-Beispiel:

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

Was ist auf im Codebeispiel gehen oben ist, dass Template-Haskell-Code für uns erzeugt hier. Alle die Erweiterungen oben mit Ausnahme QuasiQuotes sind erforderlich, da der generierte Code sie verwendet.

fand ich heraus, was Persist.Key Potato ist, indem Sie:

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

Frage:

Gibt es einen einfacheren Weg, um Informationen über Fälle von Typ Familien und Daten Familien zu bekommen, mit GHCI oder einem anderen Werkzeug?

War es hilfreich?

Lösung

Does -ddump-splices zeigen Ihnen den TH-generierten Code in diesem Fall?

Ansonsten :browse gibt Ihnen Informationen über Daten Familie Instanzen, wenn auch nicht über Art Familien.

Sie möchten vielleicht einen ghc Ticket Datei - die :browse Ausgabe sieht verstümmelt, und ein könnten Daten Familie Instanzen erwarten wie Klasseninstanzen gemeldet werden, von :info.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top