haskell - 在 Haskell 中为什么我们不能组成 show 和 fst
问题描述
我期待show.fst (1,2)
工作。但很惊讶地看到它给出了一个例外。
在运行单个fst (1,2)
返回1::Num a => a
并show 1
打印出 1 作为字符串
show.fst $ (1,2)
工作正常。这更令人困惑,因为我看不到如何进一步减少元组(据我了解,当我们想要评估表达式的正确部分时使用 $ 运算符。
解决方案
在 Haskell 中,函数应用程序的优先级高于任何运算符,因此
show . fst (1,2)
被解析为
show . (fst (1,2))
而且,因为fst (1,2) == 1
它不是一个函数,所以很难用任何东西来组合它。
操作符实际上只是函数应用程序,$
但优先级很低。这意味着,相比之下,这
show . fst $ (1,2)
如果解析为
(show . fst) $ (1,2)
这似乎是你想要的。
推荐阅读
- c# - . NET 线程被中止异常
- linux - 更新 Certbot 时出现“连接超时(可能是防火墙问题)”
- ios - SwiftUI 自定义相机 - 相机预览不断崩溃
- php - 如何在保存之前在 laravel 作业中调整大小、优化多张图片而不使用第三方服务?
- javascript - 通过 jquery 访问 div 元素数组到 .show() 或 .hide() 每个单独用于轮播
- wordpress - 在 wordpress 中未触发 save_post 操作
- c# - 如何在父游戏对象中找到子游戏对象?
- logstash - 使用logstash编码器流畅->流畅如何将结构化参数传递给Fluentd?
- r - 替换列为 ? 在数据集中
- html - 如何为 Hugo 标签添加颜色