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