haskell - 函数应用是从右到左应用吗?
问题描述
为什么会这样:
isValid :: String -> Bool
isValid = (>= 10) . length
而这不是?
isValid :: String -> Bool
isValid = length . (>= 10)
===>
• Couldn't match type ‘Int’ with ‘Bool’
Expected type: String -> Bool
Actual type: String -> Int
他们不一样吗?函数应用程序是否从右到左工作,反之亦然?
解决方案
isValid = (>= 10) . length
等价于isValid x = (length x) >= 10
,但isValid = length . (>= 10)
等价于isValid x = length (x >= 10)
,这显然是胡说八道。当用组合(不应用)函数时.
,最右边的函数应用于输入,左边的函数接收右边函数的输出作为输入。
推荐阅读
- amazon-s3 - 如何在不下载 google-colaboratory 中的图像的情况下直接从 amazon s3 存储桶读取图像到 google-colaboratory
- java - 如何操作 SQL IN 运算符以返回所有值作为结果
- sql - 如何关联两个日期相同但时间不同的字段
- c# - 在 WPF 应用程序中,如何使事件只响应用户操作?
- apl - 在 Dyalog APL 中加载 DyalogTutor_EN 工作区时出错,如何继续?
- javascript - 如何在多个异步请求中使用 js async/await
- shopify - 如何使用液体模板将 System.DateTime 数据转换为 String yyyy-mm-dd 格式?
- python - 如何在 nltk POS 数据上应用 TFIDF .....?
- arrays - 如何在颤振中解析json?
- kubernetes - 尝试推送到不安全的私有 docker 注册表时检查推送权限时出错