部分功能与输入验证

时间:2019-04-03 18:52:31

标签: haskell error-handling partial-functions

我真的很喜欢使用全部功能。就是说,有时我不确定最好的保证方法是什么。可以说,我正在从split包中编写一个类似于chunksOf的函数,在这里我想将一个列表分成给定大小的子列表。现在,我真的要说的是,子列表大小的输入必须为 positive int(因此不包括0)。在我看来,我有几种选择:

1)全力以赴:为newtype创建一个PositiveInt,隐藏构造函数,仅公开用于创建PositiveInt的安全函数(可能返回Maybe或某个{ {1}}或您有什么。看来这可能是一个巨大的麻烦。

2)split软件包的作用:如果大小<= 0,则仅返回一个无限大小为0的子列表。这似乎使您冒未捕获bug的风险,更糟糕的是:这些bug只是无限地挂起程序而没有指示出了什么问题。

3)大多数其他语言的作用是:当输入<= 0时Positive | Negative | Zero。尽管如此,我真的更喜欢全部功能...

4)返回errorEither来解决输入可能为<= 0的情况。类似于#1,似乎使用它可能很麻烦。

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

0 个答案:

没有答案