在 Haskell 中引用单例列表构造函数的惯用方式是什么?

What is the idiomatic way to refer to a singleton list constructor in Haskell?

缩写形式:有没有更惯用的写法(\a->[a])

长格式:对于任何数据类型 Foo a,如果我有一个函数 f :: Foo a -> b 并且我需要写类似...

wrapAndF a = f $ Foo a

...我可以写

让它免分
wrapAndF = f . Foo

但是如果我的函数 g :: [a] -> b 对列表进行操作并且我的包装器看起来像这样...

wrapAndG a = g [a]

...无点编写最惯用的方法是什么?我知道我可以写一个明确的 lambda:

wrapAndG = g . (\x->[x])

或者,镜像 Foo 示例中构造函数的使用,使用列表构造函数 (:),但是我必须翻转参数:

wrapAndG = g . flip (:) []

...但是引用单例列表构造函数的惯用方式是什么?我希望找到一个带有签名 a -> [a] 的标准函数,但我在 Hoogle 或 Data.List.

上找不到它

当然还有另一种选择,就是不直接编写它(这当然是一个有效的答案),但是由于将类型构造函数作为包装函数传递似乎非常有用,所以我找不到它感觉很奇怪一个将值包装到列表中的标准函数,所以我想我可能遗漏了一些东西。

刚刚找到答案,感谢 pointfree.io,它已链接到另一个问题。 wrapAndG 的一个很好的、无意义的写法是

wrapAndG = g . return

这利用了列表是 Monad.

的实例这一事实

对于列表 pure 做你想做的:

wrapAndG = g . pure

呼应 user2407038 和 chi 的 (:[]) 是一种很好的拼写方式,如果您想要特定于列表的内容:

wrapAndG = g . (:[])