Mi chiedo se esista funzionalità all'interno di GHCi (o altrove) per espandere tipi di sinonimi e famiglie da un'espressione di tipo arbitrario.Espandi i sinonimi di tipo, digita le famiglie con GHCi
Per esempio, se ho questo tipo,
data A = A
data B = B
data F a = F a
data G a = G a
data H a b = H a b
type S a b = H (F a) (G b)
type T a = S (a) (H B a)
type family R a :: *
type instance R (H a b) = H b a
allora mi piacerebbe essere in grado di ottenere questo tipo di uscita in una sessione ghci.
> :t undefined :: T (S B A)
undefined :: T (S B A) :: T (S B A)
> :texpand undefined :: T (S B A)
undefined :: T (S B A) :: H (F ((H (F B) (G A)))) (G (H B (H (F B) (G A))))
> :texpand undefined :: R (T (S B A))
undefined :: R (T (S B A)) :: H (G (H B (H (F B) (G A)))) (F ((H (F B) (G A))))
Per quanto posso dire, GHCi in realtà non offrono nulla di simile un comando :texpand
, e non sono sicuro che sarebbe la migliore interfaccia per le informazioni in ogni caso. Tuttavia, sembra probabile che i tipi espansi possano essere estratti da GHC in qualche modo, e mi piacerebbe davvero poterli vedere in modo interattivo.
Hacks, collegamenti alla documentazione, discussioni speculative sulle future aggiunte a GHCi sono tutte benvenute.
la pena ricordare che questa è una novità come del GHC 7.something. (4 o 6, ho dimenticato) –
Questo non funziona per me in GHC 8.0.2. Stampa solo gli alias di tipo così com'è, senza alcuna espansione. – Hjulle
Ho lo stesso problema con GHC 8.2.1 –