我真的很喜欢使用全部功能。就是说,有时我不确定最好的保证方法是什么。可以说,我正在从split包中编写一个类似于chunksOf的函数,在这里我想将一个列表分成给定大小的子列表。现在,我真的要说的是,子列表大小的输入必须为 positive int(因此不包括0)。在我看来,我有几种选择:
1)全力以赴:为newtype
创建一个PositiveInt
,隐藏构造函数,仅公开用于创建PositiveInt的安全函数(可能返回Maybe
或某个{ {1}}或您有什么。看来这可能是一个巨大的麻烦。
2)split软件包的作用:如果大小<= 0,则仅返回一个无限大小为0的子列表。这似乎使您冒未捕获bug的风险,更糟糕的是:这些bug只是无限地挂起程序而没有指示出了什么问题。
3)大多数其他语言的作用是:当输入<= 0时Positive | Negative | Zero
。尽管如此,我真的更喜欢全部功能...
4)返回error
或Either
来解决输入可能为<= 0的情况。类似于#1,似乎使用它可能很麻烦。
这似乎类似于this的帖子,但这更多地与错误条件有关,而不仅仅是尽可能精确地确定类型。我正在寻找有关如何确定这种情况的最佳方法的想法。我可能最倾向于做#1,并且只处理增加的开销,但是我担心自己会被踢到路上。这是一个需要根据具体情况做出决定的决定吗,还是有一个始终如一的最佳策略?