промонады
вот замечательный пост. собственно, замечателен не сам пост, а комменты, половину которых занимает диалог страждущего [узнать, что такое монады] и enlightened one, пытающегося объяснить. замечателен тем, сколько усилий потрачено и с той, и с другой стороны. замечателен также и тем, что в процессе объяснения enlightened one даёт две формальные спецификации, а именно:
public interface Monad<F> {
<A,B,C> Func<A,F<C>> bind(Func<A,F<B> f1, Func<B,F<C>> f2);
}
и
interface Monad<A> {
Monad<A> point(A a);
Monad<B> bind(Func<A,Monad<B>>);
}
причём обе спецификации неверны, как семантически, так и синтаксически. правильная спецификация выглядит примерно так:
interface Monad<A> {
Monad<A> create(A a);
Monad<B> bind(Monad<A> ma, Func<A, Monad<B>> func);
}
public interface Monad<F> {
<A,B,C> Func<A,F<C>> bind(Func<A,F<B> f1, Func<B,F<C>> f2);
}
и
interface Monad<A> {
Monad<A> point(A a);
Monad<B> bind(Func<A,Monad<B>>);
}
причём обе спецификации неверны, как семантически, так и синтаксически. правильная спецификация выглядит примерно так:
interface Monad<A> {
Monad<A> create(A a);
Monad<B> bind(Monad<A> ma, Func<A, Monad<B>> func);
}
no subject
no subject
no subject
no subject
Второе - стандарт.
Третье - с чего бы это
Monad bind(Monad ma, FuncВторое - стандарт.
Третье - с чего бы это <code>Monad<B> bind(Monad<A> ma, Func<A, Monad<B>> func);</code>? Первый параметр уже даден, это <code>this</code>.
Ты, кстати, не путаешь тайпклассы и интерфейсы? Они похожи, но не идентичны.
no subject
Второе неверно, но из-за point, а не из-за bind.
no subject
Второе неверно, но из-за point, а не из-за bind. Там-то как раз аргумент this лишний получается.
no subject
no subject
no subject