我一直在寻找在 Haskell 中编写一个词法分析器并偶然发现了这些函数。
如果定义,
some
并且many
应该是方程的最小解:
some v = (:) <$> v <*> many v
many v = some v <|> pure []
我知道(:)
insome
被提升并应用于 的值,v
以便将其添加到返回的列表中many v
。
但是为什么定义以many
开头some
?为什么它会与 连接pure []
?
这两个功能之间有什么关系或区别?成为这些方程的some
最小解意味着什么?递归是如何停止的?帮助!many