Согласно этой статье о денотационной семантике в haskell, все типы имеют дно и функцию f:A ->B является строгим, если он отображает нижнюю часть типа A в нижнюю часть типа B, в противном случае он называется нестрогим.
(Это напоминает точечную категорию, в которой морфизмы сохраняют базисную точку).
Почему в Haskell есть нестрогие функции, а в Standard ML — нет?