Итак, у меня есть эти две функции:
filterM _ [] = []
filterM p (x:xs) = do
n <- p x
ys <- filterM p xs
return (if n then x:ys else x:xs)
и
filterM _ [] = return []
filterM p (x:xs) = do
n <- p x
ys <- filterM p xs
return (if n then x:ys else x:xs)
В результате получаются эти результаты для следующего ввода: filterM (\x -> [True,False]) [0..3]
[]
или
[[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3]]
Почему return
так сильно влияет на выполнение?