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 pure
chứ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à pure
hàm cung cấp qua ánh xạ rõ ràng fmap
không?
pure
cho 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 <*> x
cũ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.)
Monoid
lớp quan trọng - trong đó pure
tương ứng với Monoid
yếu tố nhận dạng. (Điều này cho thấy Applicative
không pure
có thể là thú vị, vì Semigroup
- đó là một Monoid
mà 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 Applicative
tài liệu như luật "trao đổi".
pure f <*> x
hoà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.