gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:49:28 24 4
gpt4 key购买 nike

简写形式:有没有更惯用的写法(\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 上找不到它。

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

最佳答案

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

wrapAndG = g . (:[])

关于haskell - 在 Haskell 中引用单例列表构造函数的惯用方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42660083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com