Haskell约定:可能还是空列表?

时间:2011-03-26 21:52:17

标签: haskell

请Haskell的任何专家在那里为我澄清一些事情:

给出函数match的简化示例,该函数应该从列表返回匹配值,这是使用Maybe或返回[]的“更好”函数定义(一个空列表)?

那是:

match :: String -> [String] -> Maybe String

match :: String -> [String] -> [String]     {- possibly empty, if no match -}

出于清晰的原因,我更喜欢第一个版本,但我很想知道这种事情是否有约定。

3 个答案:

答案 0 :(得分:21)

如果它只能返回零或一个匹配,那么使用Maybe(因为这意味着它);如果可以返回任意数量的匹配,那么使用[](因为这就是它的含义)。

答案 1 :(得分:2)

我喜欢使用Maybe String。我认为这一点要清楚得多。如果您考虑与其他选项进行通信的内容,则表示您的函数采用列表并在失败时返回String或列表。在语义上,与返回StringNothing相比,这是一种时髦的IMO。

答案 2 :(得分:0)

在这种情况下,您声明如果存在,则返回单个匹配值。我会使用Maybe String,否则你会返回一个包含单个元素的列表,这似乎很奇怪。