попробуйте следующее:
indicatorComboBox = new JComboBox() {
/**
* Do not fire if set by program.
*/
protected void fireActionEvent() {
// if the mouse made the selection -> the comboBox has focus
if(this.hasFocus())
super.fireActionEvent();
}
};
Ответы здесь делают превосходное задание в определении и моноиды и монады, однако, они все еще, кажется, не отвечают на вопрос:
И на менее важной ноте, действительно ли это верно, и раз так Вы могли дать объяснение (надо надеяться, тот, который может быть понят под кем-то, у кого нет большого опыта Haskell)?
основная проблема, которая отсутствует здесь, является другим понятием "моноида", так называемое categorification более точно - тот моноида в моноидальной категории. Печально сама книга Маршрута Mac делает это очень сбивающим с толку :
Все сказали, монада в
X
является просто моноидом в категории эндофункторовX
с продуктом×
замененный составом эндофункторов и единицы, установленной эндофунктором идентификационных данных.
, Почему это сбивает с толку? Поскольку это не определяет то, что является "моноидом в категории эндофункторов" X
. Вместо этого это предложение предлагает брать моноид в набор всех эндофункторов вместе с составом функтора как бинарная операция и функтор идентификационных данных как моноидальная единица. Который работает превосходный и превращается в моноид любое подмножество эндофункторов, которое содержит функтор идентификационных данных и закрывается под составом функтора.
все же это не корректная интерпретация, которая книге не удается ясно дать понять на том этапе. Монада f
, зафиксировал эндофунктор, не подмножество эндофункторов, закрытых под составом. Общая конструкция должна использовать f
для [1 173], генерируют моноид путем взятия набора всего k
- составы сгиба f^k = f(f(...))
из [1 112] с собой, включая [1 113], который соответствует идентификационным данным f^0 = id
. И теперь набор S
из всех этих полномочий для всего k>=0
является действительно моноидом "с продуктом Г — замененный составом эндофункторов и единицы, установленной эндофунктором идентификационных данных".
И все же:
S
может быть определен для любого функтора f
или даже буквально для любой самокарты X
. Это - моноид, сгенерированный [1 120]. И сделать вещи более сбивающими с толку, определение "моноида в моноидальной категории" появляется позже в книгу, как Вы видите от оглавление . И все же понимание этого понятия абсолютно очень важно для понимания соединения с монадами.
Движение к Главе VII по Моноидам (который прибывает позже, чем Глава VI по Монадам), мы находим определение так называемого строгая моноидальная категория как трижды (B, *, e)
, где B
категория, *: B x B-> B
, bifunctor (функтор относительно каждого компонента с другим зафиксированным компонентом) и e
является объектом единицы в [1 127], удовлетворяя законы о единице и ассоциативность:
(a * b) * c = a * (b * c)
a * e = e * a = a
для любых объектов a,b,c
из [1 129], и те же идентификационные данные для любых морфизмов a,b,c
с [1 131] замененный [1 132], морфизма идентификационных данных [1 133]. Это теперь поучительно, чтобы заметить, что в нашем случае интереса, где B
категория эндофункторов [1 135] с естественными преобразованиями как морфизмы, *
состав функтора и e
функтор идентификационных данных, все эти законы удовлетворены, как может быть непосредственно проверен.
то, Что прибывает после в книгу, является определением "расслабленного" моноидальная категория , где законы только содержат по модулю некоторые фиксированные естественные преобразования, удовлетворяющие так называемый отношения когерентности , который однако не важен для наших случаев категорий эндофунктора.
Наконец, в разделе 3 "Моноида" Главы VII, фактическое определение дано:
моноид А
c
в моноидальной категории(B, *, e)
является объектом [1 140] с двумя стрелками (морфизмы)
mu: c * c -> c
nu: e -> c
создание 3 коммутативных схем. Вспомните, что в нашем случае, это морфизмы в категории эндофункторов, которые являются естественными преобразованиями, соответствующими точно join
и return
для монады. Соединение становится еще более четким, когда мы делаем состав *
более явным, заменяя c * c
[1 145], где c
наша монада.
Наконец, заметьте, что 3 коммутативных схемы (в определении моноида в моноидальной категории) записаны для общих (нестрогих) моноидальных категорий, в то время как в нашем случае все естественные преобразования, возникающие как часть моноидальной категории, являются на самом деле идентификационными данными. Это сделает схемы точно тем же как те в определении монады, делая корреспонденцию завершенной.
, Таким образом, любая монада является по определению эндофунктором, следовательно объект в категории эндофункторов, где одноместные join
и return
операторы удовлетворяют определение моноид в той конкретной (строгой) моноидальной категории . Наоборот, любой моноид в моноидальной категории эндофункторов является по определению тройным (c, mu, nu)
состоящий из объекта и двух стрелок, например, естественных преобразований в нашем случае, удовлетворяя те же законы как монада.
Наконец, отметьте основное отличие между (классическими) моноидами и более общими моноидами в моноидальных категориях. Эти две стрелки mu
и nu
выше больше не являются бинарной операцией и единицей в наборе. Вместо этого у Вас есть зафиксированный эндофунктор того c
. Состав *
функтора и один только функтор идентификационных данных не обеспечивают полную структуру, необходимую для монады, несмотря на тот запутывающий комментарий в книге.
Другой подход должен был бы соответствовать стандартному моноиду C
из всех самокарт набора A
, где бинарная операция является составом, который виден для отображения стандартного декартова произведения C x C
в [1 157]. Передавая categorified моноиду, мы заменяем декартово произведение x
составом *
функтора, и бинарная операция заменяется естественным преобразованием mu
от [1 161] до [1 162], который является набором эти join
операторы
join: c(c(T))->c(T)
для каждого объекта T
(тип в программировании). И нейтральные элементы в классических моноидах, которые могут быть отождествлены с изображениями карт от фиксированного одного набора точки, заменяются набором эти return
операторы
return: T->c(T)
, Но теперь нет никаких более декартовых произведений, таким образом, никакие пары элементов и таким образом никакие бинарные операции.