V tomto vláknu
https://forum.root.cz/index.php?topic=18370.0 , díky pěkné odpovědi od @andi-ho, jsem si uvědomil jednu věc:
Mám zápis, čitelný pro stroj:
case s `hasMinimumLen` 4 of
Just sn -> Str.sub sn 20
Nothing -> "default"
Ale pro člověka je mnohem lepší zápis:
if (Str.len s) < 4 then
"default"
else
Str.sub s 20
Jenže není vůbec žádný problém naučit stroj, aby ten druhý, lidský zápis chápal a převedl si ho na ten svůj.
Tudíž já mohu napsat:
add x y = x + y
stroj si to převede na svou reprezentaci (něco jako
x * succ y), ale podstatné je, že když změním implementaci:
add x y = y + x
add x y = if x == 0 then y else x + y
tak stroj pozná, že je to stejného typu, a nebude mět výhrady, zatímco
add x y = if x < 1 then y else x + y
odmítne.
Pointa je tedy taková, že možná není tak úplně nutné, aby psaní těch komplexních typů bylo nějak zvláště o tolik složitější než na to napsat test. Záleží, jak dobře se to navrhne.