Parsing 什么是「;“一些”;及;“许多”;备选方案的功能是什么?

Parsing 什么是「;“一些”;及;“许多”;备选方案的功能是什么?,parsing,haskell,parsec,some-and-many,alternative-functor,Parsing,Haskell,Parsec,Some And Many,Alternative Functor,我正在为你写一个Haskell,我在他实现“Nanoparsec”的部分,这是一个来自第一原理的Haskell解析器。我被困在解析器的备选方案实例上,特别是一些和许多实现: instance Alternative Parser where -- empty = ... -- (<|>) p q = ... some v = some_v where many_v = some_v <|> pure [] some_v = (:

我正在为你写一个Haskell,我在他实现“Nanoparsec”的部分,这是一个来自第一原理的Haskell解析器。我被困在解析器的
备选方案
实例上,特别是
一些
许多
实现:

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
实例替代解析器,其中
--空=。。。
--()p q=。。。
some v=some_v
哪里
许多=一些纯粹的
some_v=(:)v many_v
多v=多v
哪里
许多=一些纯粹的
some_v=(:)v many_v

我不知道这两个函数在做什么。从我所看到的,
some
接受一个解析器,应用它,并连接结果,直到输入用完为止。但是,
很多
看起来都是一样的。这里发生了什么事?

tl;重复的dr:如果一个regex/解析器是你的应用程序,那么一些是
+
(一个或多个),另外许多是
*
(零个或多个),作为对另一个重复的回答。