双方map并filter可以使用列表理解来实现:
map f xs = [f x | x <- xs]
filter p xs = [x | x <- xs, p x]
Run Code Online (Sandbox Code Playgroud)
我想用下面的例子来说明相反的情况:
[expr | p <- s]
Run Code Online (Sandbox Code Playgroud)
我到目前为止:
map (\p -> expr) s
Run Code Online (Sandbox Code Playgroud)
但这仅在模式匹配p成功对的所有元素时有效s。从某种意义上说,我首先要s使用与匹配的模式进行过滤p。自然地,我尝试调查这个问题,但是我没有找到不使用列表推导或LambdaCase的解决方案。