Haskell:是否有一种惯用的方法将列表中的每个项目插入到其自己的列表中?

6
我一直在使用((:[]) <$> xs),但如果有更明确的方法,我很乐意使用。
编辑:伙计们提供了许多好答案!由于它们都很好,所以我不确定能否接受其中一个。
6个回答

12

我认为map returnmap pure已经足够好了。


4
我认为(:[])比使用return更清晰且字符更少。 - daniel gratzer
2
@jozefg pure 更短。 - is7s
1
“pure”非常清晰、简洁,导入“Applicative”也不可能有问题,对吧? - leftaroundabout
5
(:[]) 口语上被称为“机器猴操作符”,仅因这个原因就非常优美。 - sclv
1
如果你正在使用<$>,那么你已经在导入Applicative了。 - Ben
显示剩余3条评论

7
也许这个是您要找的内容?
map (\x -> [x]) xs

我认为您的代码可以适用于任何函数对象,但对于列表来说更符合惯用语。


4

split包提供了一个(Data.List.Split.)chunksOf函数,它的名称在我看来比各种map解决方案更有意义(即使它们更具惯用性)。


4

你也可以使用列表推导式:

[ [x] | x <- theList]

也许对于这么简单的例子来说有些过度了,但根据你的情境,也许你可以将这一步与单例列表的进一步处理合并:
[f [x] + 13 | x <- theList]

2

半开玩笑版本:

import Data.List

groupBy (const . const False) xs

1
使用do符号表示:
do { x <- xs; return [x] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接