Ale já myslel nějaké konkrétní příklady v porovnání s dynamickými jazyky, ne s Javou.
Tohle možná půjde díky širokým knihovnám v některých dynamických jazycích, ale typicky to bývá dost problém... setřiď lidi sestupně podle věku, vzestupně podle příjmení - využívá typeclass Monoid a "rekurzivní" instance.
sortBy (flip (comparing age) <> comparing surname)
Monady - callback hell - JS vs. PureScript (nový JS na to má "await", takže tam už ten rozdíl není tak velký).
Polymorfní v návratové hodnotě - parsing JSONu. Tenhle kód provede kontrolu - nahlásí chybu, pokud vstupní data neobsahují položky s korektním typem. Dekóduje čas ve stringu na odpovídající typ, se kterým se dá normálně pracovat (UTCTime je něco jako "new Date()").
Vysvětlení: operátor ".:" je polymorfní v návratové hodnotě, takže hledá v objektu ten typ, který je požadován. Celé to běží v Parser monadu, takže v případě chyby se to celkem rozumně reportuje. Operátor <|> je "nebo" a funguje podobně jako "try...catch", dá se hezky řetězit.
data Person = Person Text Double UTCTime
instance FromJSON Person where
parseJSON = withObject "person" $ \o -> do
jmeno <- o .: "name" <|> o .: "jmeno"
vyska <- o .: "height" <|> o .: "vyska"
narozeni <- o .: "birthdate" <|> o .: "narozeni"
return (Person jmeno vyska narozeni)
IMO kód v dynamických jazycích může být kratší, protože třeba v případě toho parsingu by se člověk prostě vybodnul na kontrolu korektního vstupu... v některých jaycích a knihovnách to ještě nějak relativně dobře funguje přes generic parsing, ale jak do toho člověk potřebuje trochu víc hrábnout (zpětná kompatibilita apod.), tak už ten kód hodně roste a je dost nepřehledný.