О связи монад и XLinq
От: Mirrorer  
Дата: 25.02.07 17:10
Оценка: 38 (5)
Нашел вот статью. Показалась интересной, особенно в свете недавней войны относительно применения монад в императивных языках.

Автор — Erik Meijer is an architect in the SQL Server group at Microsoft
Год — 2005

XLinq: XML Programming Refactored (The Return Of The Monoids)

Пара цитат

Database [Comprehensions] and language researchers for the likes of Haskell [Haskell], Scala [Scala], Python [Python], Comega [Comega], long ago discovered that generic operations on collections are all instances of the concept of monoids or monads [Monads]. Considered as such, they satisfy many coherent algebraic properties and allow elegant syntactic sugar in the form of query comprehensions.


We propose in this paper that general-purpose languages should extend their query capabilities based on the theory and established practice of monads, allowing programmers to query any form of data, using a broad notion of collection. This proposal is in opposition to the common practice of inserting specialized sub-languages and APIs for querying XML one way, databases another way, and objects a third way. The LINQ project at Microsoft leads by example, providing basic monadic operations on collections of arbitrary origin, on top of which C# and Visual Basic programming languages have implemented generic query comprehension syntaxes on top of LINQ.


As mentioned earlier, LINQ leverages the mathematical foundation of monads to separate the general purpose query framework from the various domain specific operations, such as in this case XML axes. Monads are a recognized formalism for generalized mapping, filtering, partitioning, sorting, and folding over collections of arbitrary source and type.

The System.Query namespace contains the standard monadic query operators defined on both in-memory collections IEnumerable(Of t) and on remote collections Query(Of T). In monad speak, the former correspond to the standard list monad, while the latter corresponds to the query monad as found in HaskellDB [HaskellDB]. Both Visual Basic and C# define their own language specific query comprehension syntax on top of these base operators.


P.S Только что обнаружил более свежую статью того же автора.

Confessions of a Used Programming Language Salesman<br />
Getting the Masses Hooked on Haskell
(200Кб)

Цитаты

To bring these theoretical ideas within the reach of mainstream
programmers, we have worked tirelessly on transferring
functional programming technology from pure Haskell, via C!
to the upcoming versions of C# 3.0 and Visual Basic 9 and the
LINQ framework. Functional programming has finally reached
the masses, except that it is called Visual Basic instead of Lisp,
ML, or Haskell!


After a long journey through theoretical computer science,
database theory, functional programming, and scripting, abstract
concepts such a monoids, lambda-expression, and comprehensions
have finally reached the day-to-day world of ordinary
programmers. The LINQ framework effectively introduces
monads, monad comprehensions, and lambda expressions into
the upcoming versions of C# 3.0 and Visual Basic 9.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: О связи монад и XLinq
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.02.07 23:15
Оценка: -3 :))
Здравствуйте, Mirrorer, Вы писали:

Сумашедший ученый. Что с него взять?

Ему даже кортежи в VB мерещатся:

In Visual Basic, comprehensions are fully compositional, and
act as a pipeline that transforms collections of tuples into collections
of tuples.


Мужик привык думать в своих терминах, вот он ими и оперирует. Только это никак не добавляет в VB и C# того что в них никогда не было, и никогда не будет (за ненадобностью).

Он и в nullable-типах умудрился усмотреть монады и "лифтинг" вместо оберток.

Надеюсь этому орлу запретят писать хэлп и популярные статьи, иначе сумащедщие дома будут переполнены бедными VB-пограммистами сломавших мозг об его булшит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: О связи монад и XLinq
От: xpl Верблюд http://xplozive.livejournal.com
Дата: 26.02.07 07:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Он и в nullable-типах умудрился усмотреть монады и "лифтинг" вместо оберток.


А что, разве Nullable<T> совсем не похоже на монаду Maybe?
Re[3]: О связи монад и XLinq
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.07 08:36
Оценка:
Здравствуйте, xpl, Вы писали:

xpl>А что, разве Nullable<T> совсем не похоже на монаду Maybe?


Конечно похож! Ведь монаду можно охарактеризовть как "моп вашу ять", и следоватльно все, что сдожнее пирочинного рожа объявлять монадами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: О связи монад и XLinq
От: xpl Верблюд http://xplozive.livejournal.com
Дата: 26.02.07 08:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Конечно похож! Ведь монаду можно охарактеризовть как "моп вашу ять", и следоватльно все, что сдожнее пирочинного рожа объявлять монадами.


А можно поинтересоваться, вы когда-нибудь использовали монаду Maybe / монады вообще?
Re[3]: О связи монад и XLinq
От: ie Россия http://ziez.blogspot.com/
Дата: 26.02.07 09:34
Оценка: +1
Здравствуйте, xpl, Вы писали:

VD>>Он и в nullable-типах умудрился усмотреть монады и "лифтинг" вместо оберток.

xpl>А что, разве Nullable<T> совсем не похоже на монаду Maybe?

Не совсем похоже, но при желании сходство углядеть можно. Но вот желания у меня такого почему-то не возникает
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[4]: О связи монад и XLinq
От: xpl Верблюд http://xplozive.livejournal.com
Дата: 26.02.07 09:51
Оценка:
Здравствуйте, ie, Вы писали:

ie>Не совсем похоже, но при желании сходство углядеть можно. Но вот желания у меня такого почему-то не возникает


А у меня вот возникает (почему-то), чисто интуитивно. Собственно, поэтому и не понимаю нападок Влада на автора статьи.
Re[5]: О связи монад и XLinq
От: Mirrorer  
Дата: 26.02.07 10:30
Оценка: +2
Здравствуйте, xpl, Вы писали:

xpl>А у меня вот возникает (почему-то), чисто интуитивно. Собственно, поэтому и не понимаю нападок Влада на автора статьи.


Если в руках молоток все вокруг кажется гвоздями (с).

Высказывание работает в обе стороны.
"Если Вы отличаетесь от меня, то это ничуть мне не вредит — Вы делаете меня богаче". Экзюпери
Re[5]: О связи монад и XLinq
От: Quintanar Россия  
Дата: 26.02.07 11:07
Оценка: +1
Здравствуйте, xpl, Вы писали:

xpl>А у меня вот возникает (почему-то), чисто интуитивно. Собственно, поэтому и не понимаю нападок Влада на автора статьи.


Это потому что монада — очень общий объект. Это примерно как везде видеть функции и восторженно кричать об этом на всех углах.
Кстати, ведь есть Arrows, которые представляют из себя еще более общее понятие, через них выражаются и монады. Давайте теперь везде видеть Arrows, ведь по сути дела любая функция подойдет под их определение.
Re[6]: О связи монад и XLinq
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.02.07 11:10
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Кстати, ведь есть Arrows, которые представляют из себя еще более общее понятие, через них выражаются и монады. Давайте теперь везде видеть Arrows, ведь по сути дела любая функция подойдет под их определение.


Кстати, а почему Arrows, когда есть нормальное русское "стрелки"?
Re[6]: О связи монад и XLinq
От: xpl Верблюд http://xplozive.livejournal.com
Дата: 26.02.07 11:24
Оценка: +1
Здравствуйте, Quintanar, Вы писали:

Q>Это потому что монада — очень общий объект. Это примерно как везде видеть функции и восторженно кричать об этом на всех углах.


Q>Кстати, ведь есть Arrows, которые представляют из себя еще более общее понятие, через них выражаются и монады. Давайте теперь везде видеть Arrows, ведь по сути дела любая функция подойдет под их определение.


Если рассмотрение чего-либо в виде частного случая Arrows даст другой взгляд на проблему и поможет увидеть незаметные ранее решения — то это, безусловно, полезно.

Самое интересное — то, каким образом все это относится к обсуждению статьи. Если тебе она чем-то не понравилась — так и скажи, зачем эти экивоки.
Re[6]: О связи монад и XLinq
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.02.07 11:28
Оценка: +1
Здравствуйте, Quintanar, Вы писали:

Q>Кстати, ведь есть Arrows, которые представляют из себя еще более общее понятие, через них выражаются и монады. Давайте теперь везде видеть Arrows, ведь по сути дела любая функция подойдет под их определение.


Речь идёт о конкретном типе, который может реализовывать интерфейс монады, а не о монадах вообще.

Но в целом Вы правы, монады можно увидеть во многих местах. Это плохо?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: О связи монад и XLinq
От: GlebZ Россия  
Дата: 26.02.07 14:33
Оценка: 10 (2) +1
Здравствуйте, Mirrorer, Вы писали:

M>Автор — Erik Meijer is an architect in the SQL Server group at Microsoft

А также, насколько я знаю — он принимал участие в HaskellDB. Каким боком SQL Server group соотносится к XLinq — не знаю.
[Злобно скипнуто] Но с автором я согласен.

На тему монады нужно смотреть с двух сторон. Одна сторона — это языковая конструкция C# и monad'a haskell. Общее конечно есть — и то и другое набор связанных функций. Да пожалуй все. Это как сравнивать солнце и электрический чайник. Оба нагреваются, но нельзя и предположить что это одна и та же сущность. Точно также можно сказать что Linq является XQuery языком, поскольку поддерживает те же FLОWR операции. О чем и намекает автор. Но намекает именно на похожесть.
Вторая сторона — внутренности. Тут стоит сравнивать не монады как таковые, а именно monad comprehension(или похожий monoid comprehension) и Linq. И получается совсем интересная вещь: Linq — это набор различных механизмов которые совершенно разные по реализации, но с очень похожим интерфейсом. Я согласен с автором, что XLinq — это некоторый подвид monad comprehension в той степени как он описан здесь. Но для Linq, в котором заложены IEnumerable в которых возможны изменения состояние в процессе выполнения — monad comprehension неприменим. Поэтому сравнивать можно только с XLinq, и возможно(точно не знаю ) с DLinq. Но не с Linq как таковым как это было в первоначальном посте.
Re[5]: О связи монад и XLinq
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.07 15:39
Оценка:
Здравствуйте, xpl, Вы писали:

xpl>А можно поинтересоваться, вы когда-нибудь использовали монаду Maybe / монады вообще?


Испоьзовал. Невозможно пробовать изучать Хаскель и не использовать Монады.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: О связи монад и XLinq
От: Mirrorer  
Дата: 26.02.07 17:47
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Mirrorer, Вы писали:


M>>Автор — Erik Meijer is an architect in the SQL Server group at Microsoft

GZ>А также, насколько я знаю — он принимал участие в HaskellDB.
Ого Так глядишь лет через несколько МС вообще все Хаскелевые разработки под себя заберет
GZ>Каким боком SQL Server group соотносится к XLinq — не знаю.
А никак скорее всего. Просто указал должность чтобы не было вопросов что за человек такой этот Эрик.

GZ> Общее конечно есть — и то и другое набор связанных функций. Да пожалуй все. Это как сравнивать солнце и электрический чайник. Оба нагреваются, но нельзя и предположить что это одна и та же сущность.


Ну если создавать библиотеку работы с нагревающими элементами такой взгляд может быть полезен. Но сущность конечно же не одна.
Тут +1
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: О связи монад и XLinq
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.03.07 15:06
Оценка: 7 (1)
Здравствуйте, GlebZ, Вы писали:

GZ>А также, насколько я знаю — он принимал участие в HaskellDB. Каким боком SQL Server group соотносится к XLinq — не знаю.


XLinq отдали группе SQL Server
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.