kb
24.07.2012 07:43
Ну вот не понимаю. Очередная статься, очередная логика: хаскель — функциональный язык => нельзя поменять значение переменной => результат функции зависит только от её параметров.
а что, блять, прочитать что-то из базы данных хаскель не умеет?
http://learnyouahaskell.com/input-and-ou...
Recommended by:
@lukish: неплохо
Чтобы функция прочла что-то из БД, нужно этой самой функции передать либо готовое соединение, либо адреса-пароли-явки для самостоятельного коннекта. В последнем случае функция вернёт предписание (IO action), которое мы потом выполним и получим результат на основании данных из базы. Что не так?
у тебя в хаскеле есть функция foo(), которая читает значение из БД и возвращает его. можно ли утверждать, что при передачи определённых аргументов результат будет одним и тем же?
Нет, потому что функция имеет сайд-эффект (на что указывает IO в её типе).
Ну вот. И мой пост о том, что везде нужно приписывать "если не имеет сайд-эффектов" по 100 раз, чтоб люди понимали, что никакой серебряной пули не существует.
Понятно. Неясно только, при чём здесь серебрянная пуля, но я думаю, что ты просто плохо сформулировал мысль.
Ну, возможно. Короче говоря меня возмущают подобные цитаты:
> The only thing a function can do in Haskell is give us back some result based on the parameters we gave it. If a function is called two times with the same parameters, it has to return the same result.
Я считаю, что это некорректно, это запутывает. Даже в том же SICP, который нынче читаю, допустили подобный "огрех".
Ты идиот или троль?
В хаскеле не может быть таких функций. Типичная функция «getValue :: IO Int» возвращающает не значение поле, а лишь «ссылку» на состояние этого поля. Соответственно вся программа на haskell, — описание того, как нужно изменить текущее состояние реального мира
Не понял.
Дебил
И чего тут неправильного?
В хаскеле не может быть функций, печатающих на экран значение ячейки в базе данных?
Иди нахуй.
:[
То, что второе не следует из первого?
Нет, конечно. В хаскеле могут быть лишь функции, которые описывают как это сделать.
Следует, у тебя с элементарной логикой проблемы?
Но речь-то идёт не о сравнении описания или ссылок, а о сравнении значения по этой самой ссылке. Иначе, описание, по сути, и является самим текстом программы, просто в каком-то другом представлении.
Хаскель не работает с реальным миром. Хаскель-функция описывает что нужно сделать, чтобы сравнить значения по ссылке, но не сравнивает их. Это ДЕКЛАРАТИВНЫЙ язык программирования
Да. Но когда ты рассуждаешь о хаскель-функции, ты не рассуждаешь о возвращаемом "описании", так как ясный хер оно будет совпадать, т.к. это самое описание не даёт никаких преимуществ (оно и есть, по сути, программой).
А преимущество "чистых" функций состоит именно в возможности давать утверждение об одинаковости значений, возвращаемых функциями, и вообще не зависят от языка. Так вот, в этой логической цепочке неточность именно в том, что отсутствие сайд-эффектов является обязательным условием. Конечно, возможно автор нарочно это делает, т.к. дальше он рассказал об этой проблеме, но я считаю это неправильном.
Если ты так не рассуждаешь, то ты попросту идиот. Именно адекватный взгляд на RealWorld породил такую превосходную концепцию как линейные типы
ГОСПОДИ, ХАСКЕЛЛЬ ДАЖЕ НЕ МОЖЕТ РАЗБИТЬ СТРОКУ ПО ПОДСТРОКЕ, ЕСЛИ ТЫ НЕ НАПИШЕШЬ СВОЙ ПАРСЕР
data.list.split ?