Leave a comment

Comments 17

metaclass November 30 2012, 14:31:48 UTC
Более интересно было бы что-нибудь вроде если <=1 вернуть одну запись, а если >2 вернуть две и больше записей - на SQL такое можно сделать, но не совсем удобно

Reply

thesz November 30 2012, 14:34:53 UTC
В принципе, такое возможно.

Правда, думать я об этом пока не могу. ;)

Reply

metaclass November 30 2012, 14:53:05 UTC
thesz November 30 2012, 14:55:36 UTC
Да, хорошая демонстрация принципа.

Я, каюсь, думал посложнее сделать - чтобы список отрезался чем-то вроде cutN, чтобы return x после "cutN n" в конце возвращался не более n раз.

Reply


sassa_nf November 30 2012, 15:10:11 UTC
Я даже больше скажу.

Если рассматривать такой класс

public class IO {
private Object v;
}как может быть такой класс вообще полезным? Все внутренности являются implementation detail и никак не обнаруживаются пользователями. И вот в некоторых случаях эта private часть настолько концептуальна, что её нельзя никаким геттером вынуть.

А вот в таком виде:

public class IO {
private Object v;
public void bind(Function f) {
...
}
}уже полезно, даже если нечего вынимать геттером.

В контексте цитаты вообще можно спросить, что такое send в эрланге вообще. У актора "по ту сторону" от send может быть ничего и нельзя вынуть, можно только отдать. Вот такое вот асинхронное, одностороннее общение. Совсем как bind, который монаде "говорит" "сделай вот это".

А ещё как-то понятнее смотреть на return и <=<, ибо второе перекликается с обычным (.).

Reply


dmzlj November 30 2012, 18:12:17 UTC
бесполезно. в смыле, не достучаться

Reply

thesz November 30 2012, 19:55:31 UTC
Я использую такие события и высказывания как повод для творчества. ;)

Reply


bik_top November 30 2012, 18:22:17 UTC
> x !$ f = f x

Не помню, откуда я это взял, но там эта штука называлась «оператор евро».

> -- |> in other languages, I presume.

В математике пару раз встречал обозначение «x ⊲ f», возможно, от этого и происходит |> в OCaml/F#.

Reply


zoonior November 30 2012, 19:28:21 UTC
Если что, bind в Linq называется SelectMany (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx), а в Скале вообще flatMap.

Reply

thesz November 30 2012, 19:54:13 UTC
SelectMany очень ограниченный bind. Не такой, как в монаде списка (хотя и очень похож).

Reply

mstone December 2 2012, 10:10:26 UTC
А чем SelectMany не bind?

Reply

thesz December 2 2012, 10:14:14 UTC
Как минимум, типом?

Соедините State и List на C#, я думаю, увидите, в чём проблема.

Reply


Leave a comment

Up