我想在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>
我该如何解决?
答案 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