It's an interesting idea, but I'm not sure your use of ":" fits in well with the current concept of colon-based composition.
I would like to see this issue approached a little differently. I think we should:
1. Make "." and "!" work in a nested fashion (as I implemented in http://arclanguage.org/item?id=7644)
2. Allow the reader to treat a parenthesized item as an item that supports intrasymbol syntax.
Then, you could write the following to resolve the same way as your example:
'(a (b c)).1.0
I'll probably try implementing something that can do this sooner or later...
(defm <base>compose ((t a int) (t b int))
(annotate 'composed-int
(cons a b)))
(defm <base>compose ((t a composed-int) (t b int))
(annotate 'composed-int
(cons a b)))
Then we can redefine the call* table as an overloading of the <base>call function:
(defm <base>call ((t l cons) (t v composed-int))
(let (first second) (rep v)
((l first) second)))
> 2. Allow the reader to treat a parenthesized item as an item that supports intrasymbol syntax.
This is probably going to conflict with (a . d) format