使用map两次使用函数

时间:2014-11-16 13:56:06

标签: function haskell map functional-programming

我想在String上使用两次函数。我会解释我想要的东西所以我希望在问题的最后你明白我的意思。

所以我有这个功能。

foo :: String -> [String]
foo = ...

现在我希望这个函数在String上使用两次。因此,当首先使用时,它应该使用给予函数的String运行foo,并且在第二次运行时它应该用于第一次运行产生的[String]中的每个String。所以我猜测地图是最好的功能。 所以我现在有了这个功能

f :: String -> [String]
f w = map foo (foo w)

但是compliler给了我这个错误:

MyHaskell.hs:86:19:
Couldn't match type `[Char]' with `Char'
Expected type: String -> String
  Actual type: String -> [String]
In the first argument of `map', namely `edits1'
In the expression: map edits1 (edits1 word)

我想问题是我的函数foo(String - &gt; [String])不适用于map((a-&gt; b) - &gt; [a] - &gt; [b])。< / p>

我该如何解决?

3 个答案:

答案 0 :(得分:2)

你非常接近。

f :: String -> [[String]]
f w = map foo (foo w)

您的类型签名错误 - 如果您将foo应用于每个元素,则每个元素都变为[String],因此您需要一个嵌套列表。

答案 1 :(得分:2)

@alternative给我带来了这个答案。

我必须连结结果,以便我得到[String]作为结果。

f :: String -> [String]
f w = concat (map foo (foo w))

答案 2 :(得分:0)

这是简短的,但同样的事情:

double_map2 f g xs = map (f . g) xs