Map函数使用列表实现haskell

时间:2017-10-22 16:33:15

标签: list haskell list-comprehension map-function

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

我一直收到错误,我认为我没有走上正轨。这就是我所拥有的:

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

非常感谢能够指导我朝正确方向前进的任何帮助或链接。

2 个答案:

答案 0 :(得分:4)

我相信你的意思是&#34;理解&#34;而不是&#34;实施&#34;。

无论哪种方式,这都可行:

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

答案 1 :(得分:3)

请注意

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

desugars to

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

哪个去了

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

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

具体来说,它表明列表推导仅仅是一元运算符中map定义的伪装版本。