и как связаны фп и impl fn?
языки, которые называют функциональными, очень любят дикую краткость, из-за чего крайне тяжело читать. Не говоря уже о том, что у них на всё в стандартной библиотеке есть функции, которые ещё сильнее укорачивают пользовательский код. В итоге что на C# у тебя функция будет из 100 строк, на каком-нить хаскелле будет 10. Вот и разбирайся, что там происходит...