Ještě tu nezaznělo, že kromě vyšší bezpečnosti přináší silný typový systém také úsporu kódu díky větší znovupoužitelnosti. To jen tak pro úplnost.
Naopak silný typový systém zvyšuje délku kódu a snižuje znovupoužitelnost. Pokud mi typový systém nedovolí vložit int místo float nebo float místo double, musím to v kódu nějak obejít, což jej prodlouží.
To rozhodně ne, jak implicitní type cast prodlouží kód? Je třeba mít na paměti, že v jazycích s kontrolou typů v době překladu je tendence redukovat explicitní deklaraci typů. Logicky nikdo se nechce párat s psaním zbytečného kódu, ale chce vyzobat rozinky přísné a včasné typové kontroly. V běžných jazycích (OO i funkcionálních) se většina typů odvozuje (dedukuje). V kombinaci s rozhraními se použití dobře navržené knihovny obejde bez explicitních deklarací typů. V takovém C++ můžu mít téměř všude auto, včetně deklarací funkcí.
Tím, že jsem nucen používat explicitní typování tam, kde bych přetypovávat nemusel. Nemohu jednou funkcí sčítat int, float a spojovat stringy. Musím mít tři funkce.
Také si potřebné typy musím nadefinovat, jinak deklarace funkcí vypadají takhle:
circumference :: Float -> Float
circumference r = 2 * pi * r