简短形式:是否有更惯用的方式来撰写(\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上找不到它。
当然有一种替代方法,就是不用无点编写它(这当然是一个有效的答案)但是由于将类型构造函数作为包装函数传递似乎非常有用,因此我觉得很难找到标准函数将值包装到列表中,所以我想我可能会遗漏一些东西。