Haskel Currying合并函数

时间:2017-01-14 13:42:35

标签: haskell

快速问题我无法理解以下类型定义的制定方式和原因

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

的内容

任何人都在想解释这是如何实际转变的吗?

2 个答案:

答案 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),您可以删除括号,因为->是右关联的。