haskell - 为什么'head'(来自前奏包)没有用Maybe以安全的方式实现?
问题描述
在前奏中,head具有以下签名:head :: [a] -> a
这使得它在空列表中不安全,这不好!(head :: [a] -> Maybe a
是好方法:-))
这适用于 list 上的其他几个函数:last、tail、init minimum、maximum、cycle、last、init、foldl1、cycle... 实际上有很多这样的调用errorEmptyList
从他的网站上引用Stephen Diehl的话:
“Safe 提供了默认提供的许多不同部分函数(head、tail)的 Maybe 版本。将它包装在 Maybe 中被广泛认为是正确的方法,如果 Haskell 是今天设计的,它们就不会出现。”
我希望看到这些不安全的函数至少以某种约定被标记,因为我认为我们中的任何人都不喜欢生产中发生异常时:-)
是什么阻止了社区在前奏中解决这些问题?
解决方案
社区已经在 Hackage 上发布的自定义前奏中修复了这个问题。但它不能修复前奏本身,这取决于负责的 Haskell 委员会。对于向后兼容性的问题,它从未被修复过。
(我个人更喜欢Relude在这件事上的方法。这个前奏曲的head
功能被输入为NonEmpty a -> a
。)
推荐阅读
- ansible - Ansible:无法在 ansible playbook 中运行 docker compose
- c++ - MongoDB C++ 初始化导致 Qt 崩溃
- python - 带有列表元素的 Pyspark regexp_replace 不会替换字符串
- javascript - 单击特定按钮时,我有一个 div 需要添加到另一个 div 中。我如何使用 jquery 来做到这一点?
- c# - C# Linq OrderBy(x => x.property)
- javascript - Nodejs文件放气不会产生预期的结果
- c - 确定包含的库头文件使用哪些预处理器定义
- python - 使用自定义分隔符将 dict 列表写入 CSV
- docker - docker 内的 webpack-dev-server 麻烦
- django - 如何获得观看次数最多的产品的数量?