Xin chào những người bán hàng rong.Các cách để áp dụng hàm functor nhiều lần
Giả sử tôi có một hàm ứng dụng (không phải là một thể hiện đơn lẻ) I muốn áp dụng nhiều lần cho một giá trị ban đầu thuần túy. Ví dụ,
λ> Just (1+) <*> (Just (1+) <*> pure 0)
Just 2
Nếu tôi muốn khái quát này cho bất kỳ số ứng dụng liên tiếp, tôi có thể làm điều đó với một fold
.
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = foldr (<*>) i $ replicate n f
Sau khi định nghĩa này,
λ> applyAppl (Just (1+)) 10 $ pure 0
Just 10
Tôi có một nghi ngờ vụng về rằng tổng quát cũng có thể là thực hiện với một trong những bậc cao được xây dựng trong các công cụ applicative như sequenceA
hoặc traverse
. Có thể không?
(. Edited để đưa vào tài khoản hai bình luận đầu tiên dưới đây)
Bạn có thể cung cấp loại chức năng bạn đang cố gắng viết không? –
Bạn có ý nghĩa gì bởi "dễ dàng hơn"? Hàm của bạn là một dòng mã duy nhất; nó không thực sự dễ dàng hơn thế. – user2407038
việc đơn giản hóa bạn muốn làm là gì? Tôi đã cố gắng nghĩ về một cái gì đó, nhưng nó thực sự đã kết thúc được một số loại gấp, và bạn phải gọi '<*> 'để kéo chức năng từ applicative ra được một chức năng trong hask. – HuStmpHrrr