2017-10-22 19 views
-1

リスト実装を使用してHaskell map関数の実装を記述する方法はありますか?リスト実装を使用した関数haskell

私はエラーが発生していると私は正しい軌道にいるとは思わない。これは私が持っているものです:

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

正しい方向に私を導く助けやリンクがあれば幸いです。

+2

型シグネチャは 'map'と言っていますが、実装では' zip'と表示されます(冗長なケースがあります)。 – pat

+0

'map'の最初の引数は、(型シグニチャのような)関数です。 'map'は関数をリストの各要素に適用し、結果のリストを返します)。 2つのリストの要素からペアを作成しています。これは 'zip'です – pat

答えて

4

「実装」の代わりに「理解」を意味すると思います。

いずれにせよ、この動作します:

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

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

desugarsその

map' f xs = xs >>= return . f 
012にdesugars
map' f xs = do x <- xs 
       return $ f x 

へ(すべてのモナドもファンクタであることが証明されています)MonadインスタンスからFunctorインスタンスを定義するためのよく知られている定義(map'fmapに置き換えた場合)です

です。

具体的には、リストの理解は単なるモナド演算子でmapの定義の偽装バージョンであることを示しています。

関連する問題