anyLenght :: [forall a. a] -> Int
вот такое не компилируется
anyLenght :: [forall a. a] -> Int
anyLenght [] = 0
anyLenght (_:as) = 1 + (anyLenght as)
main = print $ anyLenght ["eijs", True]
Это всего лишь надуманное приседание, но все таки
Чтобы что-либо сравнивать — нужно иметь представление как о том, что сравнивают, так и о том, с чем сравнивается.
Направо и налево слышно — "х-ль крут! O-l крут! sc-a крута!" Крут? По сравнению с чем?
Кто из любителей статики писал достаточно много на нормальном динамически-типизированном языке? Чтобы действительно оценить все плюсы и минусы динамики? Кто писал на языке с опциональными декларациями типов?
Да нихрена, я подозреваю, никто.
Сравнение, даже если это и не указывается явно, идет обычно с каким-нибудь Javascript. Но JS, извините ли, даже по сравнению с жабой — говно полнейшее. Прикрути к нему условный хиндли-милнер — он бы не стал меньшим говном.
О Clojure, CL, Smalltalk — большинство агитаторов за статику как максимум всего лишь слышали.
Я ни разу не видел более-менее обстоятельных сравнений и аргументов. Максимум — аргументы на уровне "статика позволяет более лучше разрабатывать системы и писать код".
Лично я, например, могу достаточно четко и по пунктам объяснить, где и почему динамически-типизированные языки выигрывают, могу, взяв условный х-ль и условный cl, расписать, почему на первом создавать программы и компоненты гораздо менее удобно и практично. Способны ли на такое адепты статики? Как правило, нет. Все их аргументы обычно сводятся не более чем к anecdotal evidence и существующему лишь у них в голове common sense.