1)
https://github.com/Hirrolot/demux-stream сделал на типах, вышло 20 строк, делал на макросах - 200+ строк непонятно что делающих (к ним нужна хорошая документация что они делают)
2) почему логика на типах плохо? на логике на типах все продвинутые гарантии и делаются.
3) ну вот в расте его некруто применяют, их слишком много, потому что можно было выразить типами - почему см. выше
4) почему типы не расширяются я так и не понял. можно подтипами сделать расширяемость