问题标签 [some-and-many]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2415 浏览

haskell - Haskell:一些和很多

some有什么manyControl.Applicative.Alternative?如果我写类似的东西some $ Just 42,它似乎会导致无限递归,这似乎不是很有用......

0 投票
2 回答
2640 浏览

haskell - 'Alternative' 类型类中的 'some' 和 'many' 函数

类型类中的功能some和用途是什么?文档提供了一个我无法理解的递归定义。manyAlternative

0 投票
5 回答
10830 浏览

haskell - Alternative的“一些”和“许多”有什么用?

Alternative, 的扩展Applicative, 声明empty,<|>和这两个函数:

一个或多个:

零个或多个:

如果定义,some并且many应该是方程的最小解:

我找不到定义some和的实例many它们的意义和实际用途是什么?它们完全被使用了吗?仅仅从这个定义我就无法理解他们的目的。

更新:我不是在问什么是Alternative,只是什么是somemany

0 投票
1 回答
402 浏览

haskell - 为什么Alternative的一些和许多是haskell中的无限递归函数

我正在查看Alternativehaskell 中的 typeclass,当我发布这个时,我正在 ghci 中使用它

它挂了,我查看了Alternative的源代码,Alternative的一些和许多默认定义是这样的:

很明显some_vandmany_v是间接无限递归的,并且它们不是用 and 来定义empty<|>

如果它们必须由实例定义,那么它们不应该有默认定义,对吧?并且由于Maybe没有定义它们,因此我上面的声明被挂起,这对我来说似乎很奇怪,因为文档中没有提到它。

那么为什么他们被这样定义呢?有什么我想念的吗?

0 投票
1 回答
314 浏览

haskell - Haskell Alternative中“一些”和“许多”函数的定义是什么意思

我一直在寻找在 Haskell 中编写一个词法分析器并偶然发现了这些函数。

如果定义,some并且many应该是方程的最小解:

some v = (:) <$> v <*> many v

many v = some v <|> pure []

我知道(:)insome被提升并应用于 的值,v以便将其添加到返回的列表中many v

但是为什么定义以many开头some?为什么它会与 连接pure []

这两个功能之间有什么关系或区别?成为这些方程的some最小意味着什么?递归是如何停止的?帮助!many

0 投票
1 回答
555 浏览

haskell - 可以给延续单子变换器一个带有一些和许多的替代实例吗?

我们可以将延续单子变换器定义为

如果是via的成员,我们可以给出Cont r m一个 Alternative 实例mAlternative

然后允许somemany采用他们的默认方法。我的问题是,我们可以用's和来定义someand来代替默认定义吗?显而易见的选择manymsomemany

显然不起作用(他们甚至不进行类型检查)。有没有其他方法可以使用它们(如果我们m也需要成为一个单子,那很好)?

作为参考,some并且many必须是方程的最小解:

  • some v = (:) <$> v <*> many v
  • many v = some v <|> pure []

假设some :: m a -> m [a]并且many :: m a -> [a]满足这个定律,那么应该some :: Cont r m a -> Cont r m [a]many :: Cont r m a -> Cont r m [a]

0 投票
1 回答
643 浏览

haskell - Haskell - 一些,很多实现

在文章:“给你写一个 Haskellsome ”(第 34 页)中,给出了对“ ”和“ ”的以下解释many

和函数自动从Alternative类型类定义派生而来。接受一个函数参数并重复应用它直到函数失败,然后产生收集到的结果。该函数的行为类似,但如果没有至少一个 匹配项,它将自行失败。manysomemanysome

我一直试图理解这个实现一段时间。

我不明白如何将“ many”和“ some”应用于“列表”或“ Maybe”。

我也不确定(:) <$> v <*> many_v

这是如何得出的?

0 投票
1 回答
92 浏览

haskell - 如何使用函数`some`?

我想使用http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Base.html#somesome中的功能。Alternative

我试过了:

如您所见,我中断了输入。如何使用该some功能?

0 投票
0 回答
41 浏览

haskell - 在自定义解析器上调用许多时无限循环

我松散地遵循斯蒂芬迪尔的写你一个 Haskell来实现我自己的解析器。但是,我被困在调用并将进入无限循环的many地步some。我已经使用 将循环精确到解析器的fmap函数trace,但我无法弄清楚为什么会发生循环。查看and的源代码somemany,似乎唯一被调用的其他函数是<*>(通过liftA2), pureand <|>; 我尝试trace对所有这些函数进行调用,但这些函数都没有出现在 stdout 上。

我的解析器的基本部分如下所示:

调用manysome显示以下输出:

据我所知,我的功能已正确实现。为什么会fmap发生这种无限循环?

0 投票
0 回答
61 浏览

parsing - Alternative 的“一些”和“许多”功能是做什么的?

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

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