对于新定义的效用函数是否应该是局部的,是否存在共识?

时间:2019-05-09 09:10:04

标签: haskell

例如,Data.List中的许多功能都是部分功能,例如(cycle, (!!), init, tail, head, last)。我当前正在编写一个模块,该模块定义类似于列表的类型,即无限列表。当然,这可以避免某些局部性问题,但不能解决例如cycle

我现在面临的困境如下:
是否实施cycle :: [a] -> Maybe (InfList a)的安全版本,
还是要实现更有用,更不安全,更像base的函数?

对此有共识吗?

1 个答案:

答案 0 :(得分:4)

对此没有一般约定。您可能会同时提供两种版本,以使用户可以选择负责处理域外参数引起的错误的人。

看看list to non-empty list conversion。作者提供了两个构造函数:fromList假定输入的列表为非空,而nonEmpty则返回Maybe。在您的情况下,我将分别命名为fromCyclecyclicInfList以符合该约定。

有时很难确定哪种实现会更准确。在某些情况下,用户可能希望对其进行控制,但有时他会确定论点是正确的,这会导致可憎之物,例如使用fromJust(粗略)。在我看来,最外交的方法是同时提供两个定义,并将您的难题移交给下一个程序员。