kouzdra (kouzdra) wrote,
kouzdra
kouzdra

Из комментов:

http://kouzdra.livejournal.com/3025429.html?thread=101256469#t101256469
- Сейчас кто-то не проверяет boundaries и делитель на значение "нуль", в этом случае такие же кто-то не будут писать этих самых refined types с !=0 и malloc'и с проверкой длины массивов.

- А если скажем библиотечная функция требует в сигнатуре - хочешь не хочешь - а будешь писать.

В новой стандартной библиотеке (Std.Core) к OCaml народ от ненадежных (потому что всем лень проверять - и пишут, а потом на пустой список вылетают исключения) функций List.hd и List.tl взялись отучать очень простым способом - сделали hd
не
'a list -> 'a
а
'a list -> 'a option
(и tl аналогично)

А тут хочешь не хочешь - а проверять придется - либо что список непуст "до", либо что он был не пуст и потому результат Some 'a, а не None - "после"

PS: Boundaries при использовании функции с подобной сигнатурой не проверить просто не удастся - так или иначе но компилятор надо убедить уже во время компиляции что констрейнт соблюдается - иначе просто не откомпилится.

Самый тупой способ - явно проверить перед вызовом - но вообще-то говоря - это совершенно необязательно - в том и один из кайфов этого подхода, что эти свойства можно протаскивать автоматически очень далеко. А проверки вставлять только там где действительно появление свойства неочевидно.

Кстати тоже самое верно и в отношении язычка что по ссылке - там бы изврат с 'a option не нужен - просто в типе будет условие что список не пуст - а уж как именно убеждать в этом компилятор - вариантов весьма много (проверка - один из них)
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 9 comments