4

可以查询 ghci 的统一类型吗?

例如,如果我想知道之间的统一类型(Int -> Bool)以及(a -> Bool)如何向 ghci 查询?

我要解决的是Haskell 第三版中的练习 13.23:函数式编程的工艺

如何使用 Haskell 系统检查两个类型表达式是否可统一,如果可以,它们的统一性是什么?提示:您可以在 Haskell 中进行虚拟定义,其中定义的值,例如锆石,等同于自身:

zircon = zircon

像这样定义的值可以声明为您希望的任何类型。

谢谢,
塞巴斯蒂安。

4

1 回答 1

5

一种方法是使用. 作为一个函数,它不是很有趣,但它的类型很好:它强制它的两个参数和它的返回类型统一。所以:asTypeOf:: a -> a -> aasTypeOf

> :t asTypeOf (undefined :: Int -> Bool) (undefined :: a -> Bool)
asTypeOf (undefined :: Int -> Bool) (undefined :: a -> Bool)
  :: Int -> Bool

所以你可以看到这两种类型统一为Int -> Bool. 举一个更有趣的例子,让我们统一Maybe af (Bool, c)

> :t asTypeOf (undefined :: Maybe a) (undefined :: f (Bool, c))
asTypeOf (undefined :: Maybe a) (undefined :: f (Bool, c))
  :: Maybe (Bool, c)

另一方面,出于练习的目的,我鼓励您尝试手动进行统一。这并不难,一旦你掌握了窍门,你就会一遍又一遍地使用它。

于 2014-04-20T15:16:24.823 回答