如何在map函数中连接列表 - Haskell?

Dav*_*vid 3 haskell function

我有两个功能:

fun1 :: Int -> [Int]
fun2 :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)

fun2在帮助下接受Int list并适用fun1于此列表的每个元素map.但fun1回归[Int].所以,我有类型冲突.如何解决我的问题?

Sib*_*ibi 6

你可能想的组合map,并concat实现它.假设fun1并且fun2是这样的:

fun1 :: Int -> [Int]
fun1 x = [x,x]

fun2 :: [Int] -> [Int]
fun2 = map (+ 1)

solution :: [Int] -> [Int]
solution xs = concat $ map fun1 (fun2 xs)
Run Code Online (Sandbox Code Playgroud)

或者根据@CarstenKonig的建议,您可以使用 concatMap

solution2 :: [Int] -> [Int]
solution2 xs = concatMap fun1 $ fun2 xs
Run Code Online (Sandbox Code Playgroud)

可以进一步简化为:

solution2 :: [Int] -> [Int]
solution2 = concatMap fun1 . fun2
Run Code Online (Sandbox Code Playgroud)