
Alexander
05.03.2017
19:38:23
=)
для умных это статью читать и объяснять мне где мой пересказ неверен

Sasha
05.03.2017
19:39:17
The type signature for `head' lacks an accompanying binding
в чем проблема

Google

? animufag ?
05.03.2017
19:40:01
вообще если бы здесь потролить то норм отсылаться на лейбница про его монолог

Alexander
05.03.2017
19:40:40
> Effects are a classification of computations independent of the ex- plicit inputs and outputs of those computations.
из Tate

? animufag ?
05.03.2017
19:41:08
ещё норм бы тогда объяснить что такое действия (которые связаны с эффектами через монады)

Alexander
05.03.2017
19:41:12
очень сложное определение если честно, но самое формальное из попсовых статей
в остальных они чуть ли не перечислением даны
в Moggi было так, есть фунции a -> b (с категорией и т.д.), есть эффекты, нечно что не выражается этой категорией a \upper{t}-> b

? animufag ?
05.03.2017
19:42:49

Alexander
05.03.2017
19:43:01
нет, зависит от результата

Владислав
05.03.2017
19:43:12
Стражевые операторы внутри let юзабельны?

Alexander
05.03.2017
19:43:38
a \upper^t -> b - не образует категорию и все плохо
поэтому мы вводим типа данных который "capture" эффект, и получаем a -> M b
где у нас есть известные M для Maybe, List, Cont

Google

Alexander
05.03.2017
19:45:06
далее, нужно нам как-то чистые фукнции лифтить в такое, те. ?? :: (a -> b) -> M a -> M b обана этож функтор!
а потом надо объединять 2 функции с эффектами
можно использовать fmap, тгда будет a:: M a, f :: a -> M b, fmap f a :: M (M b) и что же делать! у нас nested datatype
а нужно ?? :: M (M b) -> M b
а мы умные мы знаем ТК это ж join
и значит чтобы передать значения из одного действия с эффектами в другое - нужн monad
а дальше куча аккуратной математики, чтобы это доказать и вывести
но кратного пересказа более чем достаточно для практики
@t1mee а зачем?

? animufag ?
05.03.2017
19:48:40
Ладно ещё раз попытаюсь

Alexander
05.03.2017
19:48:45
т.е. даже этот пересказ не нужен и без него можно жить

? animufag ?
05.03.2017
19:49:22
Не могло ли выйти так что эффекты удачно (По Божьей Милости) оказались выражены в терминах монад

Alexander
05.03.2017
19:49:28
@t1mee там вроде на лекции была задача для факториала или фибонначи через узел

? animufag ?
05.03.2017
19:49:34
и это никак не влияет на сами монады

Владислав
05.03.2017
19:49:41
Так я их изи сделал
Проблемс в том, что тут не одна, а n*3 рекурсии

Alexander
05.03.2017
19:49:58
код не покажешь, может проще будет про это подсказать

Владислав
05.03.2017
19:50:10
Для каждой аккумулятор пилить что ли?

Alexander
05.03.2017
19:50:31
на лекции fib через zipWith было?

Владислав
05.03.2017
19:50:38
Боюсь, у тебя кровь из глаз пойдет)

Google

? animufag ?
05.03.2017
19:50:42
то есть как мы считаем похожесть смысла слов через вектора, но при этом линал живёт сам по себе

Владислав
05.03.2017
19:50:52
fibonacci :: Integer -> Integer
fibonacci n | n < 0 = mhelper n
| n > 0 = helper 1 0 n
| otherwise = 0
helper :: Integer -> Integer -> Integer -> Integer
helper acc x 1 = acc
helper acc x y = helper (x+acc) acc (y-1)
mhelper :: Integer -> Integer
mhelper (-1) = 1
mhelper y = (-1)^(1-y) * fibonacci (-y)
Этот то робит

? animufag ?
05.03.2017
19:51:10
и таким образом (если моя догадка верна) нельзя сказать, что монады это эффекты

Alexander
05.03.2017
19:51:38
@vlastachu так и есть, на мой взгляд, ты все правильно говоришь

? animufag ?
05.03.2017
19:51:45
но можно сказать, что монады в том числе ещё и эффектами являются

Alexander
05.03.2017
19:51:50
ок, если я скажу не эффеты, а computation context
прозе будет?

melancholiac
05.03.2017
19:52:02

? animufag ?
05.03.2017
19:52:08
компьютейшн тут тоже непричём

Alexander
05.03.2017
19:52:17
ну монады не являются эффектами, это алгебраические структуры, которые позволяют композить эффекты, тогда уж

? animufag ?
05.03.2017
19:52:20
математика она такая аморфная
масса

Владислав
05.03.2017
19:52:47

Alexander
05.03.2017
19:52:52
это средство имея m (m a) получить m a
я ни для fib ни для этой задачи не делал аккумулятор

Alexander
05.03.2017
19:53:29
если посмотреть в оригинальный текст Moggi (как я только что сделал), то там она все время приводит список проблем, для которых монады оказываются пиздатыми

? animufag ?
05.03.2017
19:53:35
скорей всего мой препод по лингвистике сказал бы что вы процессист и привыкли думать что вся семантика это только вычисления (опять же если все предыдущие догадки были верны)

Alexander
05.03.2017
19:53:54
считаешь ли ты m типом данных инкапсулирующих эффект или computational context или бурито - не суть важно

Alexander
05.03.2017
19:53:57
и сайд-эффекты - это только одни из них. Например нондетерминизм он упоминает наряду с сайд-эффектами

Google

Alexander
05.03.2017
19:54:24
это один из сайд-эффектов

Alexander
05.03.2017
19:54:36
вопрос терминологии, как я уже сказал
moggi их разделяет везде
https://gyazo.com/aa01987a1dd5d58fb1af285e7db296fb
https://gyazo.com/274f709bdade144371f2e1a6b5f5eaaa
и т.д

Alexander
05.03.2017
19:57:31
ok

? animufag ?
05.03.2017
19:57:57
2017й год а в хаскельных конфах всё ещё монады обсуждают

Alexander
05.03.2017
19:58:06
так ты и начал вроде?

? animufag ?
05.03.2017
19:58:16
ну да)

Alexander
05.03.2017
19:58:21
с другой стороны другие не разделяют

Sasha
05.03.2017
19:58:40
evenSum :: [Integer] -> Integer
evenSum l = accumSum 0 l
accumSum n l = if l == []
then n
else let x = head l
xs = tail l
in if even x
then accumSum (n+x) xs
else accumSum n xs
main = do
evenSum [1,2,3,4,5]
Couldn't match expected type `IO t0' with actual type `Integer'

Alexander
05.03.2017
19:58:46
я сразу сказал, что это все не важно, и посоветовал человеку не читать это
компилятор говорит, что у evenSum тип не IO a
если ты хочешь вывести на экран, наверное, нужно это явно сказать, сказав print $ eventSum [1..5]

Sasha
05.03.2017
20:01:04

Евгений
05.03.2017
20:01:07

? animufag ?
05.03.2017
20:01:33
Ну короче объясню мою простую идею.
(Новичок спросит) Что такое монады?
трататата ЭФФЕКТЫ трататата...
А ок (для себя решил, что штука которая намертво прикручена к IO и поэтому сделали для неё do нотация ведь как бы в другом виде оно и не надо)

Владислав
05.03.2017
20:02:07
Я умру от спида, если в теле функции, где я вставил хелпер-функцию я применю саму эту функцию в теле хелпера?

Евгений
05.03.2017
20:02:18

Google

? animufag ?
05.03.2017
20:02:37
Ну и как бы я это объяснил: забей (ну и попросил бы объяснить если он сам разберётся)

Alexander
05.03.2017
20:02:54
foo n = xs !! n
where xs = 0:1:2:zipWith (+) (tail xs) (zipWith (\x y -> x - 2*y) (tail (tail xs)) (tail (tail (tail xs)))

Sasha
05.03.2017
20:06:27

Alexander
05.03.2017
20:08:38
гораздо эффективнее если ты будешь задавать вопросы по одному максимально конкретные, так то конечно объяснят, но для понимания это хуже будет

Владислав
05.03.2017
20:09:05
лол
Суммирует эелементы списка, но это не точно

? animufag ?
05.03.2017
20:10:16

Владислав
05.03.2017
20:10:17
Не помню, что делает even

Alexander
05.03.2017
20:10:18
@t1mee про foo n это тебе программа кстати
even возвращает True если число четное

Владислав
05.03.2017
20:10:53
неуместно
Сейчас бы смех над иронией был неуместен

? animufag ?
05.03.2017
20:12:02
а или это выше по диалогу нужно смотреть?

Alexander
05.03.2017
20:13:00
код суммирует четные числа

Sasha
05.03.2017
20:13:27
ок, evenSum :: определяем тип функции, дальше говорим, что even принимает l и возвращает accumSum, accumSum в свою очередь принимает 2 аргумента и мы не определяем ее тип тк он не особо важен, правильно?

Alexander
05.03.2017
20:13:40
но он совершенно неидеоматичен..

Владислав
05.03.2017
20:13:42

Alexander
05.03.2017
20:14:22
тип не указали, т.к. автор ленивая сволочь (извините) а компилятор выведет тип сам
обычно принято для top-level деклараций писать тип
т.к. это проще читать минимум

Sasha
05.03.2017
20:15:41
а почему мы пишем evenSum l, а не evenSum [l]