能否在GHCi中查看Haskell类型族函数的应用结果?
查看Haskell类型族应用结果的方法
当然可以查看类型族函数的应用结果啦!不过默认的:t命令不会自动展开类型族的定义,我们可以用GHCi里专门的命令来直接获取完全展开后的结果。
最直接的操作方式
- 先在GHCi中加载你的类型族代码:
{-# LANGUAGE TypeFamilies #-} type family WeirdFamily a type instance WeirdFamily () = Int type instance WeirdFamily (a, b) = (a, WeirdFamily b) - 输入带感叹号的
:kind!命令,跟上你要计算的类型族应用::kind! WeirdFamily (Bool, (Char, ())) - GHCi会立刻输出完全展开后的最终类型:
WeirdFamily (Bool, (Char, ())) :: * = (Bool, (Char, Int))
补充说明
:kind!和普通的:kind命令有本质区别::kind只会显示类型的“种类”(比如*代表普通类型),而:kind!会递归展开所有类型族、类型同义词的定义,给出最具体的结果。- 如果非要用
:t命令,也可以通过辅助的Proxy类型来触发展开,但这种方式更繁琐:
然后在GHCi中输入:import Data.Proxy type TestResult = WeirdFamily (Bool, (Char, ()))
输出会显示:t Proxy :: Proxy TestResultProxy :: Proxy (Bool, (Char, Int)),同样能看到结果,但显然不如:kind!直接高效。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

