Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何使用函数“some”?_Haskell_Applicative_Some And Many_Alternative Functor - Fatal编程技术网

Haskell 如何使用函数“some”?

Haskell 如何使用函数“some”?,haskell,applicative,some-and-many,alternative-functor,Haskell,Applicative,Some And Many,Alternative Functor,我想使用Alternative中的some功能 我试过: *MyParser Data.Attoparsec.Text Control.Applicative Data.Text> some [3443] ewrewrew ewrwwwwww545 43535 435 ^CInterrupted. 如你所见,我中断了输入。如何使用some功能?请考虑当您尝试展开some[1]时会发生什么: some [3443] == some_v == liftA2 (

我想使用
Alternative
中的
some
功能

我试过:

*MyParser Data.Attoparsec.Text Control.Applicative Data.Text> some [3443]


ewrewrew
ewrwwwwww545
43535
435

^CInterrupted. 

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

请考虑当您尝试展开
some[1]
时会发生什么:

some [3443] == some_v
            == liftA2 (:) [3443]  many_v  -- definition of some_v
            == [x:y | x <- [3443], y <- many_v]  -- definition of liftA2
            == [x:y | x <- [3443], y <- some_v ++ pure []] -- definition of many_v

由于
(++)
的严格性,许多xs将是无限的(可能是空的)列表列表(本质上,只是
[]:一些xs
),尽管结果不是惰性计算的,所以你从来没有真正终止过。

一些和许多
有点奇怪,我没有使用它们的经验,但它们是递归定义的,并且基本上对
Alternative
的列表(
[]
)实例根本不起作用,其中,
只是列表串联。我相信它们最常用于解析器,在解析器中,
对备选方案之间的选择进行建模。(虽然我看到您已经加载了Attoparsec,但您选择在列表中而不是在解析器中使用
some
)我正在阅读pratical haskell一书,其中有一个关于
parser
的练习。它使用了
some
函数。正如我所说,解析器确实使用
some
many
(我个人还没有详细研究过它们)。但在您的示例中,您没有解析器,而是有一个列表。据我所知,
一些
许多
根本不适用于列表-它们将无限期地循环..这不太正确;因为它没有处理
假设的“失败”概念,这可以让它转到第二个参数。将计算结果为
Nothing
some Nothing
与同样进入无限循环的
some(仅3个)
进行比较。
some [3443] == [[3443], [3443, 3443], [3443, 3443, 3443], ...]