有没有办法使用列表实现编写Haskell map
函数的实现?
我一直收到错误,我认为我没有走上正轨。这就是我所拥有的:
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' xs ys = [ (x, y) | x <- xs | y <- ys ]
非常感谢能够指导我朝正确方向前进的任何帮助或链接。
答案 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
定义的伪装版本。