gpt4 book ai didi

haskell - 使用 GHCi 扩展类型同义词、类型族

转载 作者:行者123 更新时间:2023-12-03 11:56:29 25 4
gpt4 key购买 nike

我想知道 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 session 中获得这种输出。
> :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 future 添加的推测性讨论都欢迎。

最佳答案

:kind!会这样做:

λ> :kind! T (S B A)
T (S B A) :: *
= H (F (H (F B) (G A))) (G (H B (H (F B) (G A))))
λ> :kind! R (T (S B A))
R (T (S B A)) :: *
= H (G (H B (H (F B) (G A)))) (F (H (F B) (G A)))

(为方便起见,您可以在 :def k! \x -> return (":kind! " ++ x) 中添加类似 .ghci 的内容。)

关于haskell - 使用 GHCi 扩展类型同义词、类型族,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com