Entry tags:
shift/reset
λxy.yxRight? Seems like half-S-combinator.
if (message inscanceof CancellationMessage) { application.cancelnahren(); }
else if (message instanceof EncouragementMessage) { galera.trabalha(); }
// etc
class Message {
enum type {
CANCEL,
ENCOURAGE,
DGAF} myType;
....
}
...
switch(message.type()) {
case CANCEL: ...
case ENCOURAGE: ...
case DGAF: ...
}
classmc = message.getClass(); if (mc.equals(CancelMessage.class)) { ... } else if (....
unapply, а ещё лучше сказать, линза (обратная сторона); с помощью её можно устраивать сравнение по образцу и, в зависимости от типа, выполнять какие-то действия с параметрами конструктора.
message match {
case CancelMessage(timeout: TimeInSeconds) => app.cancelato(timeout)
case EncourageMessage(text: String) => galera.listen(text); galera.trabalha
...
}
Option[T], Either[Left,Right] - для них как бы некошерно употреблять кейсы, а надо использовать функциональную функцию map. В принципе, скальные библиотеки любят возвращать Option[T], и тут-то бы и применять map, да штука в том, что в случае None ничего ни к чему применяться не будет. Так что приходится расписывать кейс. И со списками, что характерно, кейс приходится писать: как правило, разбивая ситуацию на два случая - пустой список или голова с хвостом, неважно, пустым или нет.Maybe, или data type.map? Но блин, это ж надо передавать, вообще говоря, по специальному исполнителю на каждый отдельный жизненный случай. Как в Джаве любят писать - лисинеры, listeners - они будут теперь здоровкаться на каждый чих.xhr, а не вызываете что-нибудь там вроде JQuery.doAjaxForMeHurry(), то у вас как правило два-три таких слушателя: - пока читает, - когда закончили, - если ошибка. А могли бы написать (если б могли)
reset {
switch {
case STILL_READING: ...; break
case GOT_RESULT: ...; return
case ERROR: ...; return
}
shift(k) {
do {
var resp = XHR.doPost(myStuff)
k(resp)
}
}
}
<script language="javascript>
function reset(f){return {shift:function(g){return g(f)}}}
</script>