在前奏中,head具有以下签名:head :: [a] -> a使其在空列表上不安全,这不好! (head :: [a] -> Maybe a是一个好方法:-))

这适用于列表中的其他几个函数:last,tail,init最小值,maximum,cycle,last,init,foldl1,cycle ...实际上有很多调用errorEmptyList

用他的website引用Stephen Diehl:


“ Safe提供了许多部分功能的Maybe版本
(头,尾)默认情况下出厂。在Maybe中包装它是
被广泛认为是正确的方法,如果设计了Haskell
今天,他们不会在场。”


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

是什么使社区无法在序幕中解决这些问题?

最佳答案

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

(我个人更喜欢Relude的方法。此前奏的head函数键入为NonEmpty a -> a。)

关于haskell - 为什么“头”(来自前奏曲包)尚未通过Maybe安全实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53139761/

10-10 15:08