所以我一直有这个小问题,我有像
这样的东西func :: a -> b -> [a] -- # or basically any a-> ...-> [a] where ... is any types ->
func x y = func' [x] y -- '# as long as they are used to generate a list of [a] from x
func' :: [a] -> b -> [a]
func' = undefined -- # situation dependant generates a list from
-- # each element and returns it as one long list
我应该这样保留吗?
我应该使用func'隐藏在哪里?
我应该只使用[a] - > b - > [a]版本并承担将[变量]传递给被调用者的责任吗?
我可能需要编写这些函数,并且可能想要搞乱订单,所以我倾向于选项3.你怎么看?
答案 0 :(得分:2)
看起来你正在尝试重新发明concatMap:
concatMap :: (a -> [b]) -> [a] -> [b]
concatMap f = concat . map f
因此“map”位将输入列表的每个元素应用于“f”。 “f”取一个“a”并返回“[b]”。然后将这些单独的列表连接成一个列表。
答案 1 :(得分:2)
作为Paul noted,func'
可以替换为concatMap
和func
。
func
本身让我想起了unfoldr
from Data.List:
unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
用于从a
生成b
的列表。
顺便说一下,func
和func'
是这些函数的不幸名称。