我是Haskell的新手,在理解语言的一些概念时遇到了一些麻烦。haskell中表达式的类型
我有以下表现:
\f x → (f x,f 1)
而且从我的理解,我可以说:
起初,我真的不能说是因为我什么˚F没有信息, 所以我说它可以是任何东西。
然后,从(FX)的应用判断我可以说,它是类型的 功能A-> B,其中x ::一个
然后从应用判断(F 1)I可以说一个是 整数类型,因此x是同一类型
然后,我真的不明白,为什么整个表达式的类型为:
(Integer → b) → Integer → (b, b)
我有一点猜测,我会说:
(Integer → b)
是函数f的类型,所以它接收和整数并返回一个类型B
Integer
是x的类型
(b b)
是两个函数的调用类型吗?
有人可以指点我正确的方向吗?谢谢
你明白了非常正确的。因为在GHCi中,文字'1'默认为'Integer',所以'\ f x - >(f x,f 1)'将被限制为'(整数 - > b) - >整数 - >(b,b)''。因此推断为函数的'f'需要一个'Integer'。由于'x'在元组元素之一传递给'f',所以'x'必须是'Integer'。 '(b,b)'只是一个元组,其中'b'是'f'的返回类型。 – bheklilr
非常感谢!这是一个很好的解释!欣赏它。 –
请您告诉我为什么这个'c b a = a b'的类型是'c :: t1 - >(t1 - > t) - > t'? @bheklilr –