Re[6]: Побочные эффекты и запись чтение в базу данных
От: salog  
Дата: 04.05.08 22:47
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>поздравляю, ты изобрёл монаду IO


BZ>читай http://haskell.org/haskellwiki/IO_inside


Понял, понял... Уже пошел читать.
Re[5]: Побочные эффекты и запись чтение в базу данных
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.05.08 05:28
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Кстати если где-то есть доступное общечеловеческим языком написанное введение в стрелки — прошу ссылки...


Дак а что там описывать я даж не знаю...
Морфизмы ониж проще пареной репы.
Да и ну функции тебеж объяснять не надо, надеюсь?
А они изоморфны стрелкам
Re[6]: Побочные эффекты и запись чтение в базу данных
От: Mirrorer  
Дата: 05.05.08 06:13
Оценка:
Здравствуйте, Курилка, Вы писали:


К>Морфизмы ониж проще пареной репы.

К>Да и ну функции тебеж объяснять не надо, надеюсь?
К>А они изоморфны стрелкам


Ну то что фунции изоморфны стрелкам допустим. В чем прелесть комбинации мстрелок в отличие от кобинации функций через точку хаскелевую или монадический бинд пояснить смогёшь ?
Re[7]: Побочные эффекты и запись чтение в базу данных
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.05.08 06:14
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Ну то что фунции изоморфны стрелкам допустим. В чем прелесть комбинации мстрелок в отличие от кобинации функций через точку хаскелевую или монадический бинд пояснить смогёшь ?


А я говорил про какую-то прелесть?
Олег, ты чтот не по адресу
Re[8]: Побочные эффекты и запись чтение в базу данных
От: Mirrorer  
Дата: 05.05.08 06:49
Оценка:
Здравствуйте, Курилка, Вы писали:

M>> В чем прелесть комбинации мстрелок в отличие от кобинации функций через точку хаскелевую или монадический бинд пояснить смогёшь ?


К>А я говорил про какую-то прелесть?


Вопрос к чему. Прелесть не прелесть не суть важно. Имелось ввиду есть ли какое-либо принципиальное различие между стрелками и обычной комбинацией, стоящее того чтобы вводить новую сущность ?
Re[5]: Побочные эффекты и запись чтение в базу данных
От: BulatZiganshin  
Дата: 05.05.08 06:51
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Кстати если где-то есть доступное общечеловеческим языком написанное введение в стрелки — прошу ссылки...


тот парень, что написал you could have invented monads, написал и насчёт стрелок. я сам не читал, правда
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Побочные эффекты и запись чтение в базу данных
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.05.08 06:53
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Здравствуйте, Курилка, Вы писали:


M>>> В чем прелесть комбинации мстрелок в отличие от кобинации функций через точку хаскелевую или монадический бинд пояснить смогёшь ?


К>>А я говорил про какую-то прелесть?


M>Вопрос к чему. Прелесть не прелесть не суть важно. Имелось ввиду есть ли какое-либо принципиальное различие между стрелками и обычной комбинацией, стоящее того чтобы вводить новую сущность ?


Опять же — эт к любителям стрелок, т.е. снова не особо по адресу
Re[9]: Побочные эффекты и запись чтение в базу данных
От: Mr.Cat  
Дата: 08.05.08 12:18
Оценка:
Здравствуйте, Mirrorer, Вы писали:
M>Вопрос к чему. Прелесть не прелесть не суть важно. Имелось ввиду есть ли какое-либо принципиальное различие между стрелками и обычной комбинацией, стоящее того чтобы вводить новую сущность ?

Эм... да нет вроде особо принципиального различия, все суть композиция функций. Так что тут уж кому что нравится, и каждый сам должен ответить на вопрос о целесообразности исходя из своей задачи. Лично мне кажется, что на стрелках несколько проще реализуется концепция потоков данных (ака ввода/вывода).
Re[10]: Побочные эффекты и запись чтение в базу данных
От: Mirrorer  
Дата: 08.05.08 13:43
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC> да нет вроде особо принципиального различия, все суть композиция функций.

Все чудесатей и чудесатей (с).
А если различия нет по каким параметрам оценивать когда использовать одно когда другое?

MC>Так что тут уж кому что нравится, и каждый сам должен ответить на вопрос о целесообразности исходя из своей задачи.

А вот допустим можно показать на пальцах ввод-вывод на стрелках и на обычной композиции ?
Потому что никак не могу понять если нет разницы, то во-первых какая разница чем пользоваться а во-вторых зачем нужны новые сущности ?

или стрелки и обычная композиция это реализации некоторого интерфейса IComposable, но в таком случае у них должно же быть какое-то отличие в реализации..
Re[11]: Побочные эффекты и запись чтение в базу данных
От: Klapaucius  
Дата: 08.05.08 15:40
Оценка: 6 (1)
Здравствуйте, Mirrorer, Вы писали:

M>или стрелки и обычная композиция это реализации некоторого интерфейса IComposable,


Как я понял, стрелка это и есть такой интерфейс.

M>но в таком случае у них должно же быть какое-то отличие в реализации..


а реализация композиции функций и стрелок слева направо (когда стрелка — это функция) отличаются только перестановкой аргументов:
instance Arrow (->) where
    -- <...>
    f >>> g = g . f
    -- <...>
... << RSDN@Home 1.2.0 alpha 4 rev. 992>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: Побочные эффекты и запись чтение в базу данных
От: BulatZiganshin  
Дата: 08.05.08 15:41
Оценка: 6 (1)
Здравствуйте, Mirrorer, Вы писали:

M>или стрелки и обычная композиция это реализации некоторого интерфейса IComposable, но в таком случае у них должно же быть какое-то отличие в реализации..


у меня слодилось впечатление, что разница вот в чём:

функции — ты компонуешь последжовательность преобразований данных

монады — компонуешь посл-ть преобразований, помиомо этого у тебя передаётся неявная информация. к примеру, вычлсиление может идти над tuple, а операции описывают манипуляции с первым элементом пары. или вычлсиление идёт над Maybe x, а операции описываются тлько над самим x. ес-но для работы со "скрытой" частью информации используются спец. операции. of course, ты получаешь выигрыш, если тебя главным образом интересует работа с явной частью информации или просто организация посл-ти вычисллений, а обращение к "скрытому состоянию" просиходит лишь в немногих операциях

стрелки — позволяют компоновать вместе операции над несколькими потоками данных. к примеру, стрелка first (*2) >>> second (*3) удваивает второй элемент в tuple и утраивает третий
Люди, я люблю вас! Будьте бдительны!!!
Re[11]: Побочные эффекты и запись чтение в базу данных
От: palm mute  
Дата: 08.05.08 16:14
Оценка: 13 (2)
Здравствуйте, Mirrorer, Вы писали:

M>или стрелки и обычная композиция это реализации некоторого интерфейса IComposable, но в таком случае у них должно же быть какое-то отличие в реализации..


Стрелка — это наиболее общий интерфейс, т.к. каждая чистая функция является стрелкой, и функции вида a -> m b, где m — некая монада, — тоже являются стрелками (стрелки Клейсли), а обратное неверно.

Ограниченность чистых функций и стрелок Клейсли заключается в том, что в выражении a >>> b аргументы a и b обязаны быть функциями. Что можно сделать с функцией? Только вызвать, других вариантов — например, паттерн матчинг по значению, — у нас нет.
А стрелка в общем случае может быть каким угодно типом, потому мы можем узнать что-то о стрелке, не "запуская" вычисления в ней.

Например, ниже мы определим дурацкую стрелку — функцию, о которой можно сказать, из скольки "элементарных шагов" она состоит, не вызывая ее.
import Control.Arrow

data Stupid a b = Stupid Int (a->b)

numSteps (Stupid n _) = n
apply (Stupid _ f) x = f x

instance Arrow Stupid where
    arr f = Stupid 1 (arr f)
    (Stupid n f) >>> (Stupid m g) = Stupid (m+n) (f >>> g)

test :: Stupid Int String
test = arr (+1) >>> arr show >>> arr (\s -> s ++ s)

main = do print (numSteps test) -- 3
          print (apply test 42) -- "4343"
Re[3]: Побочные эффекты и запись чтение в базу данных
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.08 17:06
Оценка:
Здравствуйте, salog, Вы писали:

S>В таком случае, почему бы не ввести оператор взаимной зависимости =- это когда вычисление функции основывается на результатах выполнения других функций как и положено в функциональных вычислениях, но разрешение на выполенение определеяется операторами зависимости. Все сразу бы упростилось.


Я не очень понял о чем речь, но похоже есть более простой подход... допустить "императившину". Это не так страшно как кажется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Побочные эффекты и запись чтение в базу данных
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.08 17:32
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Хотелось бы донести мысль. Монады можно использовать для реализации императивщины. Для этого они и используются. НО утверждать что они нужны исключительно для этого — неправильно.


А я утверждал? Я не утверждал. Я утверждаю другое. Я утверждаю, что ленивость по умолчанию не стоит того изнасилования головного мозга которое предлагают совершить авторы Хаскеля.

Сами монады — это конечно всего лишь паттерн встроенный в язык, но вот прооперированы они именно тем, что в язык очень не хотели вводить императивность. В результате получили все тоже самое, но с огромным трахом мозга.

M>Кстати еще вариант. Можешь рассматривать монаду IO как аналог unsafe{} блока в c#. То есть у нас везде все managed, но вот в этом конкретном месте к нам проникла опасная грязь.


Не немогу. Если у меня есть unsafe-блок, то меня никто не заставит писать весь вложенный код в опасном режиме. Я могу вызвать из опасного кода безопасный и наоборот. А вот с IO-монадой все не совсем так. К тому же unsafe — это явный хак. Лично я никогда (ну кроме тестов) не применял его. Его с успехом заменяют DllImport и т.п. Вот точно так же (если уж переходить к аналогиям), на мой взгляд более чистям способом будет просто допустить императивность в языке. Ну, а монады если уж они нужны... пусть будут... вот только без того балшита который их обычно сопровождает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.