Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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/9/loops/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包装物品的Concat_Haskell_Either - Fatal编程技术网

haskell包装物品的Concat

haskell包装物品的Concat,haskell,either,Haskell,Either,我有以下类型的项目列表: [右[(a,b)],右[(a1,b1)],右[(a2,b2)]我想得到右[(a,b),(a1,b1),(a2,b2)],可能吗? 我正在使用sequence来执行此操作,但我得到: 右[(a,b)],[(a1,b1)],[(a2,b2)]]。我想知道,是否有一个像concat这样的函数可以去掉这些内括号,使其成为一个元组列表。您可以使用一个函数,对于Left返回一个具有相同值的Left,对于Right返回一个Right,您可以将concat函数应用于右侧包装的值,以便:

我有以下类型的项目列表:
[右[(a,b)],右[(a1,b1)],右[(a2,b2)]
我想得到
右[(a,b),(a1,b1),(a2,b2)]
,可能吗? 我正在使用sequence来执行此操作,但我得到:
右[(a,b)],[(a1,b1)],[(a2,b2)]]
。我想知道,是否有一个像concat这样的函数可以去掉这些内括号,使其成为一个元组列表。

您可以使用一个函数,对于
Left
返回一个具有相同值的
Left
,对于
Right
返回一个
Right
,您可以将
concat
函数应用于右侧包装的值,以便:

concatEither :: Either a [[b]] -> Either a [b]
concatEither (Left l) = Left l
concatEither (Right rs) = Right (concat rs)
新类型为任何
Applicative
提供一个
Monoid
实例,前提是
Applicative
本身由
Monoid
参数化, 这是
或x[(a,b)]
的情况。这样我们就可以写作了

getAp . foldMap Ap :: (Monoid a, Applicative f) => [f a] -> f a
concat-sequence-yourlist
concat <$> sequence yourlist
getAp . foldMap Ap :: (Monoid a, Applicative f) => [f a] -> f a