首页 文章

如何查询统一类型为ghci?

提问于
浏览
4

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

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

我想要解决的是从第三版Haskell: The Craft of Functional Programming开始练习13.23 .

如何使用Haskell系统检查两个类型表达式是否统一,如果是这样,它们的统一是什么?提示:您可以在Haskell中进行虚拟定义,其中定义的值(锆石)与其自身等同:锆石=锆石
像这样定义的值可以声明为您想要的任何类型 .

谢谢,
塞巴斯蒂安 .

1 回答

  • 5

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

    > :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)
    

    另一方面,为了练习,我鼓励你尝试手工统一 . 一旦掌握了它,这并不难,而且是一种你会反复使用的技能 .

相关问题