I agree that we don't want to imply one being 'proper' and another being 'reverse'. I also share Marc's feeling that compose>> and compose<< don't look like Scheme names we have.
I thought compose-left and compose-right, too, but one thing that bothers me is a slight discrepancy of nomenclature of 'fold' family.
We have three variants of 'fold' over a list:
* srfi-1 fold
(fold op x (list a b c)) == (op c (op b (op a x)))
* r6rs fold-left
(fold-left op x (list a b c)) == (op (op (op z a) b) c)
* fold-right
(fold-right op x (list a b c)) == (op a (op b (op c x))
If we have (define ($ f x) (f x)), then: (I only consider 1 argument case for the simplicity)
(compose-left f g h) == (lambda (x) (fold $ x (list f g h)))
(compose-right f g h) == (lambda (x) (fold-right $ x (list f g h)))
So, we have this slightly assymetric correspondence:
compose-left <---> fold
compose-right <---> fold-right
(none) <---> fold-left
It may not be an issue if we consider an reverse of $: (define ($' x f) (f x)), then:
(compose-left f g h) == (lambda (x) (fold-left $' x (list f g h)))
(compose-right f g h) == (lambda (x) (fold-right $ x (list f g h)))
Would this be ok?