Hi Daniel and thanks for your detailed answers.
I guess the semantics you want is : [bind_s s sf]_t = [sf [s]_t]_t.
Well that doesn't seem unreasonable. I remember having pondered a lot about which switching combinators to take in the interface and I'm sure I must have considered at least :
switch_s : 'a signal signal -> 'a signal
(* [switch ss]_t = [[ss]_t]_t *)
that would allow for a very easy implementation of bind (switch_s (S.map f s)).
But if it didn't make it *may* be due to thorny signal initialization problems. If you look the signature of the current switch it's a way to force you to have to give an initial value.
As a rule of thumb using S.value is never safe if you are inside an update cycle, this means that you may get problems if you use bind_s during an update cycle itself.
It's a little bit irritating as what you want seems really sound to me, but I'm afraid you cannot implement it with the current interface without providing an initial value yourself.
I don't have the time to investigate right now but I'll surely get back to it later to give you a definitive answer.
If you are interested you may want to have a look at react's imperative hell to see if it seems workable. Especially by considering/transforming the current S.switch combinator.