请Haskell的任何专家在那里为我澄清一些事情:
给出函数match
的简化示例,该函数应该从列表返回匹配值,这是使用Maybe
或返回[]
的“更好”函数定义(一个空列表)?
那是:
match :: String -> [String] -> Maybe String
或
match :: String -> [String] -> [String] {- possibly empty, if no match -}
出于清晰的原因,我更喜欢第一个版本,但我很想知道这种事情是否有约定。
答案 0 :(得分:21)
如果它只能返回零或一个匹配,那么使用Maybe
(因为这意味着它);如果可以返回任意数量的匹配,那么使用[]
(因为这就是它的含义)。
答案 1 :(得分:2)
我喜欢使用Maybe String
。我认为这一点要清楚得多。如果您考虑与其他选项进行通信的内容,则表示您的函数采用列表并在失败时返回String
或列表。在语义上,与返回String
或Nothing
相比,这是一种时髦的IMO。
答案 2 :(得分:0)
在这种情况下,您声明如果存在,则返回单个匹配值。我会使用Maybe String,否则你会返回一个包含单个元素的列表,这似乎很奇怪。