3

我正在通过 Write You a Haskell 工作,并且我正在他实现“Nanoparsec”的部分,这是一个来自第一原理的 Haskell 解析器。我被困在Alternative解析器的实例上,特别是somemany实现:

instance Alternative Parser where
  -- empty = ...
  -- (<|>) p q = ...
  some v = some_v
    where
      many_v = some_v <|> pure []
      some_v = (:) <$> v <*> many_v
  many v = many_v
    where
      many_v = some_v <|> pure []
      some_v = (:) <$> v <*> many_v

我不知道这两个函数在做什么。从我所见,some获取一个解析器,应用它,然后连接结果,直到输入用完。但many看起来它做同样的事情。这里发生了什么事?

4

0 回答 0