首页 > 解决方案 > 为什么'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 是今天设计的,它们就不会出现。”

我希望看到这些不安全的函数至少以某种约定被标记,因为我认为我们中的任何人都不喜欢生产中发生异常时:-)

是什么阻止了社区在前奏中解决这些问题?

标签: haskell

解决方案


社区已经在 Hackage 上发布的自定义前奏中修复了这个问题。但它不能修复前奏本身,这取决于负责的 Haskell 委员会。对于向后兼容性的问题,它从未被修复过。

(我个人更喜欢Relude在这件事上的方法。这个前奏曲的head功能被输入为NonEmpty a -> a。)


推荐阅读