0

我真的很喜欢使用总功能。也就是说,有时我不确定保证这一点的最佳方法是什么。假设我正在编写一个类似于split 包中的chunksOf的函数,我想将一个列表拆分为给定大小的子列表。现在我真的宁愿说子列表大小的输入需要是一个整数(所以不包括 0)。正如我所看到的,我有几个选择:

1)全力以赴:制作一个newtypefor PositiveInt,隐藏构造函数,并且只公开用于创建 PositiveInt 的安全函数(可能返回一个Maybe或一些联合Positive | Negative | Zero或你有什么)。这似乎是一个巨大的麻烦。

2) split 包的作用:如果大小 <= 0,则返回一个大小为 0 的子列表的无限列表。这似乎是您冒着错误未被捕获的风险,更糟糕的是:这些错误只是无限地挂起您的程序而没有任何指示出错。

3)大多数其他语言所做的事情:error当输入<= 0时。我真的更喜欢总函数......

4) 返回一个EitherorMaybe以覆盖输入可能 <= 0 的情况。与 #1 类似,使用它似乎很麻烦。

这似乎与这篇文章相似,但这更多地与错误条件有关,而不仅仅是尽可能精确地确定类型。我正在寻找有关如何确定此类案例的最佳方法的想法。我可能最倾向于做#1,只是处理增加的开销,但我担心我会在路上踢自己。这是一个需要根据具体情况做出的决定,还是有一个始终如一的最佳策略?

4

0 回答 0