可以查询ghci的统一类型吗?
例如,如果我想知道 (Int -> Bool)
和 (a -> Bool)
之间的统一类型,我该如何查询到ghci?
我想要解决的是从第三版Haskell: The Craft of Functional Programming开始练习13.23 .
如何使用Haskell系统检查两个类型表达式是否统一,如果是这样,它们的统一是什么?提示:您可以在Haskell中进行虚拟定义,其中定义的值(锆石)与其自身等同:锆石=锆石
像这样定义的值可以声明为您想要的任何类型 .
谢谢,
塞巴斯蒂安 .
1 回答
一种方法是使用asTypeOf
:: a -> a -> a
. 作为一个函数,asTypeOf
不是很有趣,但它的类型很好:它强制它的两个参数和它的返回类型统一 . 所以:所以你可以看到这两种类型统一到
Int -> Bool
. 对于一个稍微有趣的例子,让我们统一Maybe a
和f (Bool, c)
:另一方面,为了练习,我鼓励你尝试手工统一 . 一旦掌握了它,这并不难,而且是一种你会反复使用的技能 .