Scalaz повторяет: «Поднимает» EnumeratorT для соответствия «IterateeT» для «большей» монады

Вы говорите, если кнопка нажата, но в вашем примере все кнопки в списке будут отключены. Попробуйте связать слушателя с каждой кнопкой, а не просто отключить его.

Для логики вы имеете в виду что-то вроде этого:

Arrays.asList(buttons).forEach(
        button -> button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                button.setEnabled(false);

            }
}));

Мне также нравится ответ Седрика, но у вас есть для добавления прослушивателя действий внутри цикла.

444
задан lmm 1 November 2017 в 07:21
поделиться

1 ответ

В обычном кодировании перечислителя по существу StepT[E, F, ?] ~> F[StepT[E, F, ?]]. При попытке записать общий метод, преобразовывающий этот тип в Step[E, G, ?] ~> G[Step[E, G, ?]], учитывая F ~> G, то Вы быстро столкнетесь с проблемой: необходимо "понизиться" Step[E, G, A] к Step[E, F, A], чтобы быть в состоянии применить исходный перечислитель.

Scalaz также обеспечивает альтернативный перечислитель, кодирующий , который похож на это:

trait EnumeratorP[E, F[_]] {
  def apply[G[_]: Monad](f: F ~> G): EnumeratorT[E, G]
}

Этот подход позволяет нам определять перечислитель, это конкретно относительно эффектов, в которых он нуждается, но это может быть "снято" для работы с потребителями, которые требуют более богатых контекстов. Мы можем изменить Ваш пример для использования EnumeratorP (и более новый естественный подход преобразования, а не старый частичный порядок монады):

import scalaz._, Scalaz._, iteratee._, concurrent.Task

def enum: EnumeratorP[String, Id] = ???
def iter: IterateeT[String, Task, Int] = ???

val toTask = new (Id ~> Task) { def apply[A](a: A): Task[A] = Task(a) }

Мы можем теперь составить два как это:

scala> def result = (iter &= enum(toTask)).run
result: scalaz.concurrent.Task[Int]

EnumeratorP одноместно (если эти F применимо), и EnumeratorP, сопутствующий объект обеспечивает некоторые функции для помощи с определением перечислителей, которые много походят на тех на [1 112] — существует empty, perform, enumPStream, и т.д. Я предполагаю, что должно быть EnumeratorT экземпляры, которые не могли быть реализованы с помощью EnumeratorP кодирование, но первое, что пришло на ум я не уверен, на что они были бы похожи.

4
ответ дан Travis Brown 4 November 2019 в 08:47
поделиться
  • 1
    +1 для указания на причину, почему это происходит – mko 30 October 2012 в 10:19
Другие вопросы по тегам:

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