我想知道 GHCi(或其他地方)中是否存在从任意类型表达式中扩展类型同义词和族的功能。
例如,如果我有这些类型,
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
那么我希望能够在 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))))
据我所知,GHCi 实际上并没有提供任何类似:texpand
命令的东西,而且我不确定它是否是该信息的最佳接口。但是,似乎可以以某种方式从 GHC 中提取扩展类型,我真的希望能够以交互方式查看它们。
黑客、文档链接、关于 GHCi 未来添加的推测性讨论都欢迎。