ПС
1) Число аннотаций можно свести к минимуму (тот же Хаскель, извините)
2) Типы являются opt-in (TypeScript, Julia? Насчёт второго не уверен)
Size: a a a

ПС
ПС
K
K
AC
АП
[
K
class FromString s where
fromString :: String -> s
instance FromString String where
fromString s = s
instance FromString Int where
fromString = read
main = do
let a = fromString "a"
let b = fromString "4" + 1
print (show a, show b)
fromString - это перегруженная функция, возвращающая разные типы.fromString :: FromString s -> String -> s
show :: Show a -> a -> String
a :: String, b :: Int. После чего компилятор идёт выводить коректные реализации class Show a where show :: a -> String.K
K
AC
AC
[
[
[
a