Tôi đang học Ứng dụng của Haskell. Dường như với tôi (có lẽ tôi đã sai) rằng purechức năng này không thực sự cần thiết, ví dụ:
pure (+) <*> [1,2,3] <*> [3,4,5]
có thể được viết như
(+) <$> [1,2,3] <*> [3,4,5]
Ai đó có thể giải thích lợi ích mà purehàm cung cấp qua ánh xạ rõ ràng fmapkhông?
purecho phép người ta sử dụng các giá trị "thuần túy" trong tính toán Áp dụng. Trong khi, như bạn quan sát chính xác, pure f <*> xcũng giống như f <$> x, không có tương đương như vậy cho, nói , f <*> x <*> pure y <*> z. (Ít nhất là tôi không nghĩ vậy.)
Monoidlớp quan trọng - trong đó puretương ứng với Monoidyếu tố nhận dạng. (Điều này cho thấy Applicativekhông purecó thể là thú vị, vì Semigroup- đó là một Monoidmà không nhất thiết phải có một bản sắc -. Vẫn được sử dụng thực tế, bây giờ tôi nghĩ về nó, tôi dường như nhớ lại PureScript có chính xác như một "applicative mà không pure" lớp, mặc dù tôi don 'không biết nó dùng để làm gì.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z, tôi nghĩ vậy. Ý tưởng là trong Applicativetài liệu như luật "trao đổi".
pure f <*> xhoàn toàn giống nhưfmap f x. Tôi chắc chắn rằng có một số lý do tại saopuređược đưa vàoApplicative, nhưng tôi không hoàn toàn chắc chắn tại sao.