Function 使用map两次使用函数

Function 使用map两次使用函数,function,haskell,map,functional-programming,Function,Haskell,Map,Functional Programming,我想要一个对字符串使用两次的函数。我会解释我想要什么,所以我希望在问题的最后你明白我的意思 所以我有这个函数 foo :: String -> [String] foo = ... 现在我希望这个函数在字符串上使用两次。因此,在第一次使用时,它应该使用给定给函数的字符串运行foo,在第二次运行时,它应该在第一次运行生成的[String]中的每个字符串上使用。所以我猜map是最好的函数。 现在我得到了这个函数 f :: String -> [String] f w = map foo

我想要一个对字符串使用两次的函数。我会解释我想要什么,所以我希望在问题的最后你明白我的意思

所以我有这个函数

foo :: String -> [String]
foo = ...
现在我希望这个函数在字符串上使用两次。因此,在第一次使用时,它应该使用给定给函数的字符串运行foo,在第二次运行时,它应该在第一次运行生成的[String]中的每个字符串上使用。所以我猜map是最好的函数。 现在我得到了这个函数

f :: String -> [String]
f w = map foo (foo w)
但是编辑给了我这个错误:

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->[String])与map((a->b)->[a]->[b])不兼容

我该怎么解决呢?

你很接近

f :: String -> [[String]]
f w = map foo (foo w)
您刚刚得到了错误的类型签名-如果您将
foo
应用于每个元素,则每个元素都将成为
[String]
,因此您需要一个嵌套列表。

非常接近

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

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

@alternative让我得到了这个答案

我必须计算结果,所以我将得到[String]作为结果

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

@另一种选择让我得到了这个答案

我必须计算结果,所以我将得到[String]作为结果

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

这比较短,但也是一样的:


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

这较短,但内容相同:


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

,它等于
import Control.Monad;f=foo>=>foo
。也与
concatMap foo相同。foo
,等于导入控制.Monad;f=foo>=>foo。也与
concatMap foo相同。foo