使用列表实现的映射函数 haskell

Map Function using list implementation haskell

有没有办法使用列表实现来编写 Haskell map 函数的实现?

我不断收到错误消息,而且我认为我的方向不对。这是我的:

map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' xs ys = [ (x, y) | x <- xs | y <- ys ]

任何能指导我正确方向的帮助或 link 将不胜感激。

我相信你的意思是 "comprehension",而不是 "implementation"。

无论哪种方式,这都行得通:

map' f as = [f a | a <- as]
map' (* 2) [1..5]

注意

map' f xs = [f x | x <- xs]

脱糖为

map' f xs = do x <- xs
               return $ f x

脱糖到

map' f xs = xs >>= return . f

这是众所周知的定义(如果将 map' 替换为 fmap),用于从 Monad 实例定义 Functor 实例(从而证明所有monad 也是函子)。

具体来说,它表明列表推导式只是 map 单子运算符定义的伪装版本。