@haskellru

Страница 852 из 1551
kir
18.02.2018
14:55:26
Оно делает именно то, что ты хотел

Vyacheslav
18.02.2018
14:56:27
нет

я говорил, что если ты на типе определил просто >>=, то автоматом юзаешь do-syntax, так это тоже можно делать, но это не очень понятно имхо потом

еще и семантику меняешь

Google
Alexander
18.02.2018
15:05:31
нельзя определить просто >>=

этим хаскель и хорош, кстати

Vyacheslav
18.02.2018
15:07:43
Правда?

kir
18.02.2018
15:07:46
Другого не завели. Кстати, никогда не пытайтесть выполнить throw $ fix SomeException. По Ctrl-C ghci не прибивается

Vyacheslav
18.02.2018
15:07:57
Почему это хорошо?

Alexander
18.02.2018
15:08:51
потому что такие вещи пакуются в неймспейсы

kir
18.02.2018
15:09:23
Можно определить >>=, в локальном контексте. Но do-нотация всё равно рассахаривается в Prelude.>>=

Alexander
18.02.2018
15:09:39
в целом можно рассахаривать и в >>=

через RebindableSyntax

Например, если не любишь прелюдию

kir
18.02.2018
15:10:07
Мы его только что поминали)

Alexander
18.02.2018
15:10:12
вот да

суть в другом, что если у тебя есть >>= то ты описываешь контракт на этот метод через тайпкласс

Google
Alexander
18.02.2018
15:10:48
собственно, внезапно, все что имеет >>= и return это монада

kir
18.02.2018
15:11:08
(и выполняет monadic laws!)

Заставить их выполнить, к сожалению нечем, у нас тут не Agda

Alexander
18.02.2018
15:16:52
кстати, а агду ктонибудь уже пробовал?

есть смысл переключится с хаскеля на нее и попробовать разорбаться?

Imants
18.02.2018
15:23:28
Надеюсь, что в тему: наткнулся на список блогов, сравнивающих Х. с другими языками: https://wiki.haskell.org/Blog_articles/Comparisons

Rushan
18.02.2018
15:48:38
извините, что не гугля спрашиваю а в чём суть Agda и отличие от Haskell?

Imants
18.02.2018
15:59:26
Цель другая: Agda из этой оперы: https://en.m.wikipedia.org/wiki/Proof_assistant Хаскель для.., ну, много чего. Но скорее не для формальных доказательств

Alexander
18.02.2018
16:00:25
ну вы уж меня извените, но цель хаскеля явно не в написании когда

это proof of concept

то что код можно писать это совпадение

а вообще,ч ем круче система типов тем круче язык

Imants
18.02.2018
16:01:50
.. О, оказывается, Agda написана на Хаскеле

Alexander
18.02.2018
16:02:04
я хочу язык, где можно указать тип "целое число от 1 до 20"

и чтобы тайпчекал выход за границу массива, например

вопрос, если есть комонады значит где то есть и контрмонады?

kir
18.02.2018
16:10:50
https://hackage.haskell.org/package/contravariant-1.4.1 контрмонад нет, есть контрафункторы, контр-аппликативы и контр-альтернативы

Warning: Kmett's code ahead

Alexander
18.02.2018
16:16:50
ну там суть в том, что функторы это кофункторы

Google
Alexander
18.02.2018
16:17:45
типа функторы это "могу писать + fmap" а контрфунктор "могу читать + fmap"

в полном соответствии с семантикой ко- и контр- вариантных типов

A64m
18.02.2018
16:18:17
Alexander
18.02.2018
16:18:49
пруф какого концепта-то?
существование полностью ленивого тьюринг-полного языка, емнип

хотя это то просто

ну в общем, в хаскеле изначально компилятор был интереснее самого языка

A64m
18.02.2018
16:22:18
ну нет, во-первых, пруфом этого концепта был LML, во вторых ghc делать стали позже чем хаскель. В 80-е установили что можно сделать практически полезный ленивый ФЯ, хаскель был уже платформой для дальнейшего экспериментирования, можно ли вообще более-менее эффективно компилировать такие ФЯ - такого вопроса уже не было, это не хаскельный эксперимент

Alexander
18.02.2018
16:23:08
значит меня обманули :(

но вообще там была аналогия с тем, что пролог тоже сделали но эксперимент не удался и получилось говно лютое

Alister
18.02.2018
16:24:59
пролог как будто не для людей делали

Alexander
18.02.2018
16:25:28
нужен уточняющий смайлик, не могу распарсить ирония это или утверждение :(

Alister
18.02.2018
16:26:32
ну я на нем в свое время писал нейросети простенькие

на слабо от препода

так-то мы на питоне писали, но я вызвался на прологе

Alexander
18.02.2018
16:26:57
и как, эффективно?

я кстати на удивление часто слышу пролог именно в связке с machine learning

Alister
18.02.2018
16:28:08
оказалось рекурсия и имутабельность вместе с процессом выполнения как достижения целей вполне подходят итеративным процесам достижения вменяемого респонса нейронов нейросети

Alexander
18.02.2018
16:28:40
я короче разобрался, комонадами называются контрмонады

Alister
18.02.2018
16:28:44
плюс мутабельность там раз и обчелся и вполне может быть описана гармоническим рядом

Alexander
18.02.2018
16:28:57
так как контрафункторы раньше назывались кофункторами, думаю дело тут нечисто

Google
Alister
18.02.2018
16:31:03
не уверен. это тот язык в котором любой опыт в другом программировании только мешает

A64m
18.02.2018
16:33:27
но вообще там была аналогия с тем, что пролог тоже сделали но эксперимент не удался и получилось говно лютое
ну а у экспериментов 80-х с ФЯ результаты были сносные, так что вопрос можно ли вообще такое делать уже потом не стоял | | RT | y | fib | prim | | | | | 20 | 300 | | ------- | --------- | --- | ---- | ---- | | C | | | 0.46 | 0.2 | | LML | G-machine | 84 | 0.92 | 0.5 | | LML | G-machine | 88 | 0.78 | 0.26 | | VAX ML | FAM | 84 | 0.5 | 1.2 | | SML/NJ | cmachine | 88 | 0.4 | 0.38 | | Franz | | | | | | Lisp | | | 1.1 | 1.1 | | SASL | SECD | 84 | 31 | 20 | | LCF ML | Stanford | | | | | | LISP | 84 | 46 | 29 | | Miranda | S-K | 88 | 72 | 12.3 |

вот у ФЯ 70-х производительность была вообще никакая (в этой таблице это LCF ML и SASL)

мирандовый рантайм это тоже изобретение 70-х, сам язык новее

kana
18.02.2018
17:48:37
так как контрафункторы раньше назывались кофункторами, думаю дело тут нечисто
советую не использовать нейминг функторов на всем остальном

контр в функторах это скорее исключение, контрмонад нет (насколько я знаю)

именно ко обозначает переворачивание стрелок

а контр в кофункторах показывает не сколько дуальность, сколько контрвариантность

Alexander
18.02.2018
17:50:22
разве разворот стрелки не делает ковариантные штуки контрвариантными?

в этом же вроде бы и суть

kana
18.02.2018
17:50:57
моноид ковариантен?

Alexander
18.02.2018
17:51:21
моноид инвариантен по идее

kana
18.02.2018
17:52:07
ну собственно я к тому, что не думаю, что на все, что дуально, можно отнести к ко и контрвариантному

это две разные характеристики, которые пересеклись на функторах (по случайности)

Alexander
18.02.2018
17:53:00
а, я понял смысл нотации

это омонимы

Alexander
18.02.2018
17:54:05
ну, технически, математики все дуальное любят называть ковариантом и контрвариантом

типа у них такой Either

Google
Sergey
18.02.2018
18:04:46
Всем привет, как записать Int в файл? Можно даже побайтно

kana
18.02.2018
18:06:57
writeFile "./file" $ show 2 ?

Index
18.02.2018
18:07:36
Контрафункторы это функторы в дуальную категорию, а вот кофункторы это дуал самих функторов. Функторы дуальны самим себе, так что кофункторы = функторы.

kana
18.02.2018
18:10:02
ох, вот оно че

Index
18.02.2018
18:10:08
Комонады это дуал монад, но они все еще в категории эндофункторов, а не в категории контрафункторов

Я не уверен, что контрафункторы образуют категорию вообще. По крайней мере очевидным образом не образуют.

Поэтому о контравариантных монадах речь вести не приходится.

Антон
18.02.2018
18:13:31
делает вид, что всё понимает, и кивает с умным видом

Index
18.02.2018
18:14:26
Я могу объяснить если меня спрашивать ;)

Антон
18.02.2018
18:17:38
так, функтор — отображение категории, сохраняющее до некоторой степени структуру, эндофунктор — функтор из категории в неё же. Пока всё верно?

Index
18.02.2018
18:19:35
Функтор это отображение одной категории в другую, да. Объекты в объекты, морфизмы в морфизмы, равенства в равенства (сохранение структуры композиции и id)

Эндофунктор из категории в себя, да.

Антон
18.02.2018
18:21:19
Категория эндофкнуторов — очевидно... А контрафункторы тогда что?

Index
18.02.2018
18:22:40
Контрафункторы это отображение категории в обратную категорию

kana
18.02.2018
18:22:46
хм, мы же можем сказать про некую любую категорию, обратна она или нет, получается контрафунктор всегда отображает в обратную этой же категории?

Index
18.02.2018
18:23:16
Эндофунктор над C это C -> C Контрафунктор над C это C -> Op(C) или Op(C) -> C (не важно)

Для любой категории C, например Hask

хм, мы же можем сказать про некую любую категорию, обратна она или нет, получается контрафунктор всегда отображает в обратную этой же категории?
Не можем, одна категория может быть обратной по отношению к другой, если они идентичные, но стрелки развернуты

В изоляции ты не определишь, категория обратная или нет, это не её собственное свойство

на примере Hask 1. определим категорию H1 так, что объекты в ней типы в Хаскеле с кайндом *, а стрелки между объектами A B это функции A -> B (с оговорками про bottom) 2. определим категорию H2 так, что объекты в ней типы в Хаскеле с кайндом *, а стрелки между объектами A B это функции B -> A (с оговорками про bottom)

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