Насколько я помню, типы это накрутка поверх лямблда исчисления, которое является основой функционального программирования. Разве нет?
Если честно, не интересовался что там с типами, но знаю что идеи функционального программирования пошли от Чёрча и его лямбда-исчесления. Которое, в свою очередь позволяло фигачить функции прям в том месте где они были нужны и тут же получать результат и заворачивать в другую функцию и пошло-поехало.
Вот эту кстати вложенность очень прикольно видно если в хацкеле do-нотацию развернуть)