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

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

我想要解决的是Haskell第三版的练习13.23 :功能编程工艺

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

 zircon = zircon 

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

谢谢,
塞巴斯蒂安。

===============>>#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)

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

  ask by Fof translate from so

未解决问题?本站智能推荐:

1回复

(flip。)的类型是什么?

我试图了解为什么以下类型: (flip .) is: (a -> a1 -> b -> c) -> a -> b -> a1 -> c 首先,类型: flip: is (a -> b -> c) -> b ->
2回复

手动派生类型`(。)(foldr(++))(map(:))`

我试图推导出类型(.) (foldr(++)) (map (:)) 我首先推导出foldr (++)的类型foldr (++) 所以 然后我推导出map (:)的类型map (:) 所以 最后的类型(.) (foldr(++)) (map (:))
1回复

推导(文件夹(。))的类型

我正在尝试手动导出(文件夹(。))的类型 然后: 所以我得到了(foldr (.)) :: (a2 -> b2) -> [(b2 -> c2)] -> (a2 -> b2) 但是GHCi返回:: :t (foldr (.)) :: (a -&g
2回复

文件夹的派生类型(!!)

由此我们得到a->b->b=[c]->Int->c或a=[c],b=Int,b=c 。 我们得出结论,文件夹(!!)的类型为Int- Int->[[Int]]->Int 。 这是正确的吗? WinGHCi告诉我一些不同:
1回复

手动推导q类型(在主体中指定)

我不明白为什么q的类型是Ord t => [t] -> [a]而不是Ord a => [a] -> [a] 在什么情况下输入类型可能与输出不同? 谢谢, 塞巴斯蒂安。
2回复

推导组成函数的推断类型Haskell:特别是(。)map uncurry

关于推导组合函数的推断类型,这里有很多线程,但是我还是很困惑。 我发现的任何一篇文章都没有给出有关如何统一类型的一般解释。 我的一份考试学习指南中有一个问题,我很难弄清楚。 8)(。)地图非推断的推断类型是什么:: ________ 我大多数时候都能够派生推断类型,但我仍然感
1回复

手动推导zipWith的类型。 uncurry`

我试图派生zipWith . uncurry的类型zipWith . uncurry zipWith . uncurry zipWith . uncurry = (.) zipWith uncurry zipWith . uncurry = (.) zipWith uncurry连接为函数
2回复

手动推导`f1 x xs =(filter。(<))x xs`的类型

我想手动得出以下类型: f1 x xs = (filter . (<)) x xs 第一次看到x ,所以: 然后(<)具有这种类型: 如果以下类型可以统一,我们只能说(< x) : 然后 所以 过滤器具有此类型 第一次
2回复

GHC拒绝ST monad代码无法统一类型​​变量?

我写了以下函数: 但是当我尝试编译时,我收到以下错误: 有人可以帮忙吗?
2回复

防止类型统一

给出这个整数的包装: 我可以执行以下操作: 因为幻象参数将统一。 但是我想阻止这种统一并在c行引起类型错误。 ST monad使用rank2类型来实现类似的效果。 我可以通过改变addProxy的类型来做类似的addProxy 。 但我特别不想这样做。 我想以某种方