Tôi đang chú ý đến các functors, functors ứng dụng ... Tôi không chắc chắn làm thế nào để có được nơi tôi muốn, nhưng tôi có cảm giác rằng sau các loại sẽ giúp tôi gần gũi hơn.Tôi có thể ánh xạ phần tử đầu tiên của một cặp không có mũi tên không?
Có cách nào đơn giản để thực hiện một số map
giống như chỉ áp dụng cho phần tử đầu tiên của bộ 2-bit không? Lấy first
từ Control.Arrow
và sử dụng Arrow (->)
, điều này làm các trick độc đáo:
map . first :: (b -> c) -> [(b, d)] -> [(c, d)]
mối quan tâm duy nhất của tôi là tôi vẫn chưa đạt được một trực giác thực sự cho mũi tên, và vì vậy tôi có thể sẽ tìm thấy bản thân mình trong nước sâu sớm hay sau này nếu tôi tiếp tục. Thêm vào đó, điều này có vẻ là một trường hợp khá thuận tiện mà không thể được khái quát hóa.
Tôi có thể nhận được cùng chức năng bằng cách sử dụng một cái gì đó từ các thư viện, monads hay bất cứ điều gì khác, trong khi nhận được trái tim của những gì tôi muốn? Tôi đang đùa giỡn với
\f -> map (f `on` fst)
giống như ý tưởng nhưng không thể đến đó được.
Nếu sử dụng một sự trừu tượng bạn không hiểu làm cho bạn không thoải mái, có * hoàn toàn không có gì * sai với việc sử dụng bản tóm tắt ít hơn bản đồ (\ (a, b) -> (fa, b)) '. –
Cảm ơn tất cả các đề xuất!Điều này đã thực sự khai sáng. Đã chấp nhận câu trả lời được bầu chọn hàng đầu của bạn. – Ashe
Kiểm tra http://stackoverflow.com/questions/413930 nếu bạn cảm thấy không thoải mái với bản đồ. đầu tiên'. – sdcvvc