Já si myslím, že není. Protože dynamické typování je úplně jiná (samozřejmě špatná) filozofie programování. Ale nerad bych se opakoval. :-)
To se nevylučuje. Používat v celém programu takhle široký součtový typ je úplně jiná (podle někoho samozřejmě špatná) filosofie programování
Nejde o to, že je špatná.
Když napíšu staticky typovanej program, tak je to jako když si vypálím cestičky, kterým potom tečou data. Ty jednotlivé typy kontrolujou, zda jsou jednotlivé cesty na sebe správně napojený. Druhý význam typů je, že určuje odbočky. Například parsování čísla.
V dynamickém jazyce typy slouží jako aserty při vstupech. A jako informace, podle kterého může (ale nemusí) můj if udělat odbočku (ve statickém jazyce si tu odbočku musím připravit).
type Person = {name: String, surname: String, age: Int}
parsePerson(s: String) : Maybe Person = ...
str.concat (a: String, b: String) = ...
readIO(io) =
case (parsePerson(io.read())):
Just x -> console.log str.concat("person: ", x)
Nothing -> console.error "Je třeba definice Person."
Dá se to zapsat v statickém i dynamickém jazyce. V obou použiju stejný druh typu. Dokonce stejnou konstrukci (ač u dynamických jazyků jsou obvyklejší výjimky). Jenže dynamický jazyk tu chybu pustí.
Přijde mi, že se používá stejný nástroj (typ), ale každý úplně jiným způsobem.