问题标签 [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.
haskell - Haskell:一些和很多
some
有什么many
用Control.Applicative.Alternative
?如果我写类似的东西some $ Just 42
,它似乎会导致无限递归,这似乎不是很有用......
haskell - 'Alternative' 类型类中的 'some' 和 'many' 函数
类型类中的功能some
和用途是什么?文档提供了一个我无法理解的递归定义。many
Alternative
haskell - Alternative的“一些”和“许多”有什么用?
Alternative
, 的扩展Applicative
, 声明empty
,<|>
和这两个函数:
一个或多个:
零个或多个:
如果定义,
some
并且many
应该是方程的最小解:
我找不到定义some
和的实例many
。它们的意义和实际用途是什么?它们完全被使用了吗?仅仅从这个定义我就无法理解他们的目的。
更新:我不是在问什么是Alternative
,只是什么是some
和many
haskell - 为什么Alternative的一些和许多是haskell中的无限递归函数
我正在查看Alternative
haskell 中的 typeclass,当我发布这个时,我正在 ghci 中使用它
它挂了,我查看了Alternative的源代码,Alternative的一些和许多默认定义是这样的:
很明显some_v
andmany_v
是间接无限递归的,并且它们不是用 and 来定义empty
的<|>
。
如果它们必须由实例定义,那么它们不应该有默认定义,对吧?并且由于Maybe
没有定义它们,因此我上面的声明被挂起,这对我来说似乎很奇怪,因为文档中没有提到它。
那么为什么他们被这样定义呢?有什么我想念的吗?
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
haskell - 可以给延续单子变换器一个带有一些和许多的替代实例吗?
我们可以将延续单子变换器定义为
如果是via的成员,我们可以给出Cont r m
一个 Alternative 实例m
Alternative
然后允许some
并many
采用他们的默认方法。我的问题是,我们可以用's和来定义some
and来代替默认定义吗?显而易见的选择many
m
some
many
显然不起作用(他们甚至不进行类型检查)。有没有其他方法可以使用它们(如果我们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]
。
haskell - Haskell - 一些,很多实现
在文章:“给你写一个 Haskellsome
”(第 34 页)中,给出了对“ ”和“ ”的以下解释many
:
和函数自动从
Alternative
类型类定义派生而来。接受一个函数参数并重复应用它直到函数失败,然后产生收集到的结果。该函数的行为类似,但如果没有至少一个 匹配项,它将自行失败。many
some
many
some
我一直试图理解这个实现一段时间。
我不明白如何将“ many
”和“ some
”应用于“列表”或“ Maybe
”。
我也不确定(:) <$> v <*> many_v
。
这是如何得出的?
haskell - 如何使用函数`some`?
我想使用http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Base.html#somesome
中的功能。Alternative
我试过了:
如您所见,我中断了输入。如何使用该some
功能?
haskell - 在自定义解析器上调用许多时无限循环
我松散地遵循斯蒂芬迪尔的写你一个 Haskell来实现我自己的解析器。但是,我被困在调用并将进入无限循环的many
地步some
。我已经使用 将循环精确到解析器的fmap
函数trace
,但我无法弄清楚为什么会发生循环。查看and的源代码some
many
,似乎唯一被调用的其他函数是<*>
(通过liftA2)
, pure
and <|>
; 我尝试trace
对所有这些函数进行调用,但这些函数都没有出现在 stdout 上。
我的解析器的基本部分如下所示:
调用many
或some
显示以下输出:
据我所知,我的功能已正确实现。为什么会fmap
发生这种无限循环?
parsing - Alternative 的“一些”和“许多”功能是做什么的?
我正在通过 Write You a Haskell 工作,并且我正在他实现“Nanoparsec”的部分,这是一个来自第一原理的 Haskell 解析器。我被困在Alternative
解析器的实例上,特别是some
和many
实现:
我不知道这两个函数在做什么。从我所见,some
获取一个解析器,应用它,然后连接结果,直到输入用完。但many
看起来它做同样的事情。这里发生了什么事?