@haskellru

Страница 344 из 1551
Aleksey
03.08.2017
14:36:25
Псто много книг, написанных до появления Except

Даниил
03.08.2017
14:36:30
как эксепшны могут рекомендоваться если это небезопасно, грязно и фу-фу-фу?

Alexander
03.08.2017
14:36:47
@astynax type Except e = ExceptT e Identity или другой Except?

Vasiliy
03.08.2017
14:37:18
Google
Alexander
03.08.2017
14:37:44
вотя и говорю, что он жирнее, чем Either

Aleksey
03.08.2017
14:37:52
ещё и асинхронные эксепшны есть

вотя и говорю, что он жирнее, чем Either
несильно, зато трансформер!

State сотоварищи - тоже алиасы над тпансформерами с идентити

Это уже на спичках экономия :)

Denis
03.08.2017
14:40:55
и Reader, Writer, RWS

Aleksey
03.08.2017
14:43:14
Identity - newtype, лишних оберток нет все равно

Denis
03.08.2017
14:51:46
кынули тут http://starcolon.com/blog/moment-of-wtf-on-learning-haskell/index.html

Index
03.08.2017
14:52:45
Правильные тип сумма и тип-произведение это Rec и Union

они сразу N-арные

И у них нет всяких инстансов Foldable (даже по кайндам не сойдется)

Google
Index
03.08.2017
14:53:46
Но их мешает использовать (1) синтаксический оверхед (2) небольшой performance-penalty

А еще хочется унификации higher-order произведений и сумм. Потому что раздражает иметь data Pair a b = Pair a b data Product f g a = Product (f a) (g a) data Biproduct f g a b = Biproduct (f a b) (g a b) ...

Здесь, опять же, Rec и Union подходят за счет параметризации интерпретирующим функтором.

Vasiliy
03.08.2017
14:59:01
Rec, я так понимаю, из vinyl

Index
03.08.2017
14:59:05
https://hackage.haskell.org/package/vinyl-0.6.0/docs/Data-Vinyl-Core.html

Vasiliy
03.08.2017
14:59:27
Union из union

Index
03.08.2017
14:59:30
А почитать нигде не могу порекомендовать хорошего, но вот в этой книжке будет https://intermediatehaskell.com/

Union из union
Ага, а еще в новом vinyl ввели CoRec, который вроде эквивалентен (но устроен по-другому внутри)

Vasiliy
03.08.2017
15:02:30
ого, здорово

CoRec - он из пакета Frames того же автора

Index
03.08.2017
15:05:01
В общем я только хочу сказать, что штуковины с кайндом (k -> *) -> [k] -> * — это удачная концепцая, часто полезная, но с определенным оверхедом, который не всегда оправдан. Если бы они имели больше поддержки в языке (удобный синтаксис хотя бы), то было бы хорошо.

У них и с выводом типов история хорошая, компилятор всегда подсказывает в нужном направлении при использовании.

Т.е. хотя на первый взгляд это может показаться какой-то адок на типах, там нет линзоподобных ошибок

Alexander
03.08.2017
15:11:06
(k -> *) -> [k] -> * вообще прекрасно

Alexander
03.08.2017
15:32:18
удобно в хозяйстве, можно много чего выразить

Dmitry
03.08.2017
15:45:28
> {} + {} '[object Object][object Object]' > {} + {}; NaN
Напомнило (не WAT, но новичкам как обычно может быть в диковинку ghci> [] ++ [] [] ghci> [] ++ "" "" ghci> [] == "" True

Misha
03.08.2017
15:45:57
так type String = [Char] же

Google
Dmitry
03.08.2017
15:46:41
Да, с этим спорить я не буду

Index
03.08.2017
15:51:05
:set -XOverloadedLists -XOverloadedStrings

и после этого вышеперечисленное вообще не обязано работать

Sergey
03.08.2017
17:16:56
там же ад и ужас в жавах со спрингом
это не спринг чат ребят... я думаю для таких дискусий вам сюда t.me/springframeworkio

Alex
03.08.2017
17:21:41
спринг некромант :)

Alexander
03.08.2017
17:23:33
интересная форма рекламы

Vladimir
03.08.2017
19:21:33
Ну и откуда тут спринг.?

Deleted account
04.08.2017
03:37:59
t.me/folderarchive — канал, где бесплатно сливают платные полезные курсы и материалы.

Yuriy
04.08.2017
08:35:22
заходит @Foo в бар...

Dmitry
04.08.2017
10:39:24
Ну так это правильно же. Из за ленивости вычислений. Тоже самое const42 a b = a const42 1 undefined > 1
Это не ленивость вычисления, это ленивость тайпчекера, что более интересно. Например, const 1 ("wat" + "man") тупо не компилируется.

Vasiliy
04.08.2017
10:43:19
я так понимаю, потому что тип второго аргумента должна определять сама функция wtf, а в случае с const тип аргумента определяет тот, кто её вызывает

Alexander
04.08.2017
10:43:26
это только в ghci?

или если компилять то тоже?

Dmitry
04.08.2017
11:13:03
или если компилять то тоже?
Такой код компилируется вполне ок. И если вызвать в ghci foo, то выведет 1 {-# LANGUAGE RankNTypes #-} wtf :: a -> (Num b => b) -> a wtf x _ = x foo :: Int foo = wtf 1 ("wat" + "man")

Не скомпилируется, так как у вас ошибка. Надо вот так Prelude> const 1 ("asd" ++ "dsd") 1
Лол, ну так в этом и прикол, что компилируется, когда строки складываются через +, а не ++

Andrew
04.08.2017
11:23:50
Все дошло до меня)

Google
Aleksey
04.08.2017
11:24:21
+ тут, это не сложение списков, а чего угодно, реализующего Num. И "строки" тут не списки (не обязательно), т.к. OverloadedStrings повзоляетт записать в виде строкового литерала всё, что угодно, лишь бы это что-то умело IsString (да, капитанствую). Отсюда "foo" + "bar", это нечто, умеющее IsString и Num

Den
04.08.2017
11:24:21
Пардон за оффтопик, а как вы тут код форматируете? Бот какой работает?

Aleksey
04.08.2017
11:25:04
Vasiliy
04.08.2017
11:25:11
Дед Пегас
04.08.2017
11:26:05
Либо в три `

`

Хм.

Vasiliy
04.08.2017
11:26:21
да, я тоже три написал :D

Дед Пегас
04.08.2017
11:26:36
Я хотел три обернуть в шесть, не вышло

`

Даже с пробелами съедает.

Den
04.08.2017
11:26:49
хмм, я попробовал *zzz* - не заработало, и забил на markdown

Дед Пегас
04.08.2017
11:27:08
Как ты это сделал?

`

Vasiliy
04.08.2017
11:27:25
_подчёркивания_ вроде должны работать

Дед Пегас
04.08.2017
11:27:30
zzz

подчёркивания тоже двойные

Aleksey
04.08.2017
11:28:16
двойные, да. Так что это Telegram flavoured not-so-Markdown

Google
Vasiliy
04.08.2017
11:28:32
ага, спасибо за информацию

Yuriy
04.08.2017
11:52:07
* = тип [*] = список типов

ой, вопрос пропал

Den
04.08.2017
11:52:36
да я удалил, ибо пока писал, понял, какой бред написал

Yuriy
04.08.2017
11:53:10
вместо * лучше писать Type (http://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Kind.html#t:Type), будет проще

Den
04.08.2017
11:53:37
я там запутался немного, и привидилось, что в одном месте тип описан типа как * -> * -> *, а в другом он же как * -> *

хмм, занятно: type * = * A backward-compatible (pre-GHC 8.0) synonym for Type

Alexander
04.08.2017
12:01:23
двойные, да. Так что это Telegram flavoured not-so-Markdown
обычный подход ещё со времен email

чего сразу мардавном звать

Yuriy
04.08.2017
12:05:46
сам Телеграм называет это маркдауном

Alexander
04.08.2017
12:05:57
ok

Евгений
04.08.2017
14:12:01
Чо наконец-таки ВПИЛИЛИ разметку?

Страница 344 из 1551