首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >` `flip‘是如何工作的?

` `flip‘是如何工作的?
EN

Stack Overflow用户
提问于 2015-04-07 18:57:32
回答 2查看 508关注 0票数 3

为什么flip id被接受为有效表达式?它不应该在对b -> c进行a类型检查时失败吗

代码语言:javascript
复制
Prelude> :t flip
flip :: (a -> b -> c) -> b -> a -> c
Prelude> :t id
id :: a -> a
Prelude> :t flip id
flip id :: b -> (b -> c) -> c
EN

回答 2

Stack Overflow用户

发布于 2015-04-07 19:08:54

重点是

代码语言:javascript
复制
id :: a -> a

用于任何类型的a,包括函数类型。也就是说,我们可以选择a = (b -> c)并获取

代码语言:javascript
复制
id :: (b -> c) -> (b -> c)

,因为->关联到右边,所以通常写成

代码语言:javascript
复制
id :: (b -> c) -> b -> c

上面的代码可以解释为一个带有两个参数的函数:第一个参数类型为b -> c,第二个参数类型为b。这样我们就可以flip它了。

票数 13
EN

Stack Overflow用户

发布于 2015-04-07 19:09:06

id类型中的a可以匹配任何类型,特别是(b->c)

代码语言:javascript
复制
Prelude> :t id :: (b -> c) -> (b -> c)
id :: (b -> c) -> (b -> c) :: (b -> c) -> (b -> c)

->是右关联的,所以我们可以去掉最右边的一组括号

代码语言:javascript
复制
Prelude> :t id :: (b -> c) -> b -> c
id :: (b -> c) -> b -> c :: (b -> c) -> b -> c

使id成为一个双参数函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29489905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档