Как сделать эти функции с динамическим контролем типов безопасными с точки зрения типов? [закрытый]

Check-all checkbox должен быть обновлен сам при определенных условиях. Попробуйте нажать на «# select-all-teammembers» , затем снимите отметку с нескольких пунктов и снова нажмите «select-all». Вы можете увидеть несоответствие. Чтобы предотвратить это, используйте следующий прием:

  var checkBoxes = $('input[name=recipients\\[\\]]');
  $('#select-all-teammembers').click(function() {
    checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    $(this).prop("checked", checkBoxes.is(':checked'));
  }); 

Кстати, все флажки DOM-объекта должны быть кэшированы, как описано выше.

9
задан Dario 3 July 2009 в 12:22
поделиться

3 ответа

1 # Это не типизируется с конечным типом. Это означает, что очень немногие (если вообще есть) языки программирования смогут это напечатать.

Однако, как вы продемонстрировали, существует особый тип для x, который позволяет набирать функцию:

x :: t -> B

Где B - конкретный тип. Это приводит к тому, что apply набирается как:

apply :: (t -> B) -> B

Обратите внимание, что Хиндли-Милнер не будет наследовать этот тип.

2 # Это легко представить в Haskell (оставлено в качестве упражнения для читателя ...)

4
ответ дан 4 December 2019 в 23:40
поделиться

Когда дело доходит до примера №1, вам нужно указать тип возвращаемого значения Apply (), и тогда все переданные вами функции x также должны вернуть это. Большинство статически типизированных языков не смогли бы сделать это безопасно без проверок, поскольку переданная вами функция x может возвращать все, что угодно.

В примере № 2 тип объектов итератора таков, что они являются итераторами. Если вы имеете в виду то, что они возвращают, они возвращают итераторы. Я не понимаю, почему это невозможно в статической системе, но, возможно, я что-то упускаю.

0
ответ дан 4 December 2019 в 23:40
поделиться

Я нашел решение Haskell для # 1 , используя Rank-N-Types (только для GHCi)

{-# LANGUAGE RankNTypes #-}
apply :: (forall a . a -> r) -> r
apply x = x x

apply $ const 42 -- Yields 42
2
ответ дан 4 December 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: