我有两个功能:
fun1 :: Int -> [Int]
fun2 :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)
fun2在帮助下接受Int list并适用fun1于此列表的每个元素map.但fun1回归[Int].所以,我有类型冲突.如何解决我的问题?
你可能想的组合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)