Control.Applicative.Alternative
中的some
和many
对什么有好处?如果我写像some $ Just 42
这样的东西,它似乎会导致无限递归,这似乎不是很有用…
当它们用作解析器组合子时是有意义的。
some
意味着解析器被应用尽可能多的次数,但至少一次。
many
是类似的,但也不允许解析,在这种情况下,return
替换[]
而不是失败。
在Maybe
的情况下,Just ...
永远不会"失败",因此您的解析器some $ Just 42
循环。