2016-05-04 12 views
0
map :: (a -> b) -> [a] -> [b] 
map f xs = [f x | x <- xs] 

この定義は、Hutton(Hutton)によるプログラミング(p.62)からのものです。ハスケルマップ関数のタイプ詳細

その型を見ると、関数が第1引数をとり、第2引数がリストであることを理解します。

しかし種類以上が(a -> b) -> ([a] -> [b])?なるんので、マップが機能を取り、[a]をとる関数を返し、[f x|x <- xs]?

を返し、なぜそれが(a -> b) -> [a] -> [b]の代わりに、例えば(a -> a) -> [a] -> [a] ?

で、本はmap(+1)[1,3,5,7]

を使用しています

誰かがこの機能について詳しく説明できますか?

+2

「a - > b」は、2つのタイプが異なる必要があることを意味するものではなく、異なることができることを意味します。 – chepner

答えて

5

関数returnは、文字列の長さなど、他の型でもかまいません。表記

(a -> b) -> [a] -> [b] 

は一般

a -> b -> c -> d 

(a -> b) -> ([a] -> [b]) 

と同等ですが(+1)があることを起こる

a -> (b -> (c -> d)) 

あなたの機能と同等ですNum a => a -> a特別なケース。

0

ヒント: 関数の型はカリングの法則に従っているので、右結合であることに注意してください。このため、型のカッコを避けるか、取り除くのはこのためです。

一方、関数の型([a]、[b])に異なる文字を使用すると、入力や出力に別の型を使用することを示します。