快速问题我无法理解以下类型定义的制定方式和原因
:t const
const :: a -> b -> a
:t id
id :: a -> a
:t (const id)
(const id) :: b -> a -> a
以下内容实际上并未解决a -> a -> b -> a
a -> a
来自a -> b -> a
AKA (const(id _))
任何人都在想解释这是如何实际转变的吗?
答案 0 :(得分:2)
const :: a -> b -> a
id :: c -> c
在使用id 之前const
const :: (c->c) -> b -> (c->c)
应用id后const
const id :: b -> (c -> c)
const id :: b -> c -> c
无论您对const id
申请什么,都会获得c -> c
答案 1 :(得分:2)
const x :: b -> ??
,其中??
是x
的类型。在这种情况下,x
是函数id
,其类型为a -> a
。因此,const id :: b -> (a -> a)
,您可以删除括号,因为->
是右关联的。