Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, VoidEx, Вы писали:
VE>>Ух ты, это что это у них, монады или ленивость неявные появились? Куда строгость делась, нелогично как-то. Тип же int, а вычисление не проиведено.
VD>Зачем тут ленивость? Исключение предотвращает любую возможность продолжения вычислений. Так что ленивые они или нет уже не важно.
Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def.
Здравствуйте, VoidEx, Вы писали:
VE>Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def.
Людям удивительно что throw можно написать внутри выражения.
Ибо во всех известных им языках throw это statement и не как иначе.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
VE>>Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def. WH>Людям удивительно что throw можно написать внутри выражения. WH>Ибо во всех известных им языках throw это statement и не как иначе.
Вообще, все началось с того, что я показал, что try/catch может быть внутри выражения. Ну, и далее народ понесло заниматься исследованиями .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Аноним, Вы писали:
А>Понравился и сам докладчик (в хорошем смысле слова),
Это прямо как в том анекдоте...
Курилка какой-то организации... Стоят несколько сотрудников, курят и один из них говорит:
— Наш начальник полное говно!
Тут появляется начальник. Сотрудник видит его и замялив добавляет:
— Ну, в хорошем смысле этого слова.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Вот те раз! Пол часа рассказывал о ComputationExpressions и раз двадцать повторил, что они основаны на монадах, но до многих эта мысль так и не смогла дойти.
Учитывая, что монады — это живые, духообразные единицы, из которых все состоит и кроме которых ничего в мире нет (http://ru.wikipedia.org/wiki/Монадология) можно с уверенностью сказать, что всё в этом мире основано на монадах. Вот, даже Эрику (http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx) они в сишарпе мерещатся. Однако ценность языка программирования как средства коммуникации между программистами, заключается (по моему мнению) в возможности выражать абстракции, причем не на уровне комментариев (названия идентификаторов тоже являются комментариями) а на уровне семантики.
Монадой является тройка (T, η, μ), состоящая из (эндо)функтора и двух естественных преобразований, удовлетворяющих аксиомам монады. В Хаскелле она представлена с помощью класса типов Monad. Действительно, рассмотрим категорию, где объектами являются типы Хаскелла, а стрелками — функции вида a -> b. Конструктор типа монады отображает произвольный тип из Hask в Monad. Функция отображения произвольного морьфизьма выражается через return и bind: map f = flip bind (return . f). η соответствует return. μ соответствует join, который опять же выражается через bind: join m = bind m id. Далее, пользуясь тем, что монада представлена на уровне системы типов, можно объявлять функции, которые будут работать с любой монадой, например такую — liftM2 : Monad m => (a -> b -> c) -> m a -> m b -> m c, берущую любую функцию от двух аргументов, и поднимающую её в монаду. Ну и так далее.
Программист, работая с этим, всегда будет видеть, с каким именно объектом он имеет дело, будет понимать, какими свойствами обладают эти функции и работая с любым монадическим интерфейсом всегда сможет воспользоваться общим набором знакомых ему комбинаторов.
VD>Поддержка же монад языком — это не более чем синтаксический сахар скрывающих ненужные детали.
Обычно под поддержкой монад понимают возможность выразить их средствами языка, как я описал выше. Синтаксический сахар, вроде do нотации, служит только для того, чтобы не лепить руками замыкания. Сомневаюсь, что если из Хаскелла уберут этот сахар, кто-нибудь станет говорить, что поддержки монад в нём больше нет. Например для функторов, стрелок, комонад и т.д. в Хаскелле никакого сахара нет, тем не менее язык позволяет описывать эти объекты. С другой стороны, в F# есть хак компилятора, называемый Computation Expressions и представляющий собой "обессахариватель", весьма близкий к do-нотации. Но вот сами монады в языке не представлены никак, для достижения сходного эффекта там придется таскать с собой expression builder и заниматься всякими извращениями.
VD>Макросы не пригодны для изменения системы типов.
Это зависит от языка и макросистемы. В случае Typed Scheme ответ скорее да, чем нет. Но здесь я скорее иронизировал, сделать крутую систему типов, да еще на дотнете, да еще так, чтобы это не тормозило, будет очень-очень сложно. Настолько сложно, что даже не понятно, зачем, ведь интеграция с дотнетом нужна только ради его фреймворка, а активное его использование сведет на нет любые преимущества от мощной системы типов или ленивости.
VD>Это прямо как в том анекдоте...
Не, ничего такого я не имел ввиду, анекдот раньше не слышал
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, hardcase, Вы писали:
A>>>Ты взорвал мой мозг.
H>>Вообще-то он процитировал Лейбница.
M>Лейбниц писал на Хаскеле?!?!! M>гыгы
Нет. Готфрид Лейбниц придумал монады (труд Монадология).