Có nhiều cách để thực hiện điều đó, nhưng tất cả đều hơi khó xử.
((+3).) . (*)
≡ fmap (+3) . (*)
≡ curry $ (+3) . uncurry (*)
≡ \l r -> l*r + 3
Oh, chờ đợi, đây là chữ ký ở đâu đó cũng là một nét nhỏ gọn, đoán những gì nó được gọi là ...
((.).(.)) (+3) (*)
Tôi muốn lập luận rằng các giải pháp lambda, là rõ ràng nhất, là thay vì tốt nhất ở đây.
giúp gì, và thường được thực hiện chỉ tại địa phương như một (hoặc hai) -liner, là để xác định thành phần này như một trung tố tùy chỉnh:
(.:) :: (c->d) -> (a->b->c) -> a->b->d
f .: i = \l r -> f $ i l r
nào cho phép bạn viết đơn giản (+3) .: (*)
.
BTW, tương tự (b->b->c) -> (a->b) -> a->a->c
(đặt trước hàm đúng cho cả hai đối số của thông số này) tồn tại a widely-used standard implementation.
http://conal.net/blog/posts/semantic-editor-combinators – luqui
[This] (http://stackoverflow.com/questions/9656797/variadic-compose-function) có thể là những gì bạn đang tìm kiếm . – is7s