使用列表实现的映射函数 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
单子运算符定义的伪装版本。
有没有办法使用列表实现来编写 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
单子运算符定义的伪装版本。