Fix a problem that >> can't compose some functions

Now we can compose:
* T1 -> T2 and T2 -> void
* void -> T and T -> void