
Alexander
06.08.2018
21:27:20
в chronos хотя меньше от воли компилятора зависит

Kirill
06.08.2018
21:28:11
вроде где-то ещё бенчи пробегали, где он пошустрей был
от мэта парсонса чтоль

Alexander
06.08.2018
21:31:58
ясно, буду иметь ввиду

Google

Alexander
06.08.2018
21:32:00
пасиб

Terminator
06.08.2018
23:11:56
@yargeel будет жить. Поприветствуем!

Александр
07.08.2018
06:08:23
Вопрос: а можно ли использовать Type Application на переменных типа, описанных в сигнатуре функции?
func :: c -> IO ()
func cVal = do
someFunc @ c
Я что-то не могу найти в доке этой инфы

Yuriy
07.08.2018
06:09:14
вот так можно
func :: forall c. c -> IO ()
func cVal = do
someFunc @c
forall, чтобы ввести переменную
@c, чтобы применить

Terminator
07.08.2018
06:10:25
@aadudyrev будет жить. Поприветствуем!

Александр
07.08.2018
06:10:57

Yuriy
07.08.2018
06:12:03
func :: c -> IO ()
func (cVal :: c) = do
someFunc @c
вот так можно без квантора, кажется

Александр
07.08.2018
06:13:44

Yuriy
07.08.2018
06:13:55
проверь

Александр
07.08.2018
06:14:06
Проверю

Google

Александр
07.08.2018
06:30:04
Не похоже, что такое будет работать. Не может задедьюсить c, если оно не используется, даже если его передали откуда-то из другого места в функцию func

Yuriy
07.08.2018
06:36:53

Александр
07.08.2018
06:37:56
Да, он предлагает отключить проверку. AllowAmbiguiousTypes

Yuriy
07.08.2018
06:38:39

Александр
07.08.2018
06:40:37
Ну, да, с этим расширением все компилится. На SO говорят, что оно в целом безопасное и редко кода его можно избежать

Dmitry
07.08.2018
06:41:20
Редкий код долетит до середины компиляции...

Yuriy
07.08.2018
06:41:48
только код не такой красивый будет

Alexander
07.08.2018
06:55:18
или используя forall и ScopedTypeVariables
прокси нужно если иначе в сигнатуре тип не присутствует
а у нас есть какой-то колбек чтобы сообщить что GC произошло, чтобы статистику собрать?
а то если делать с таймером, то часть пропустится
gcDoneHook
интересно а без собственного main можно её запилить?

Artem
07.08.2018
09:21:26
Объясните новичку. пожалуйста.
Зачем нужен forall?
Разве без него функция не остается полиморфной?

Alexander
07.08.2018
09:23:50
явно написанный forall (как выше) нужен чтобы включить режим в ScopeTypeVariables когда указание полиморфной переменной типа соотносится с тем что в сигнатуре
а вообще неявный форол есть во всех полиморфных функциях
ещё возможно разговор про полиморфизм высших рангов, но наверное нет?
когда пишешь T (forall a . ...)

Google

Yuriy
07.08.2018
09:40:20
да, для обычных полиморфных функций forall подразумевается, если его написать, ничего не изменится. разница есть для необычных — тех, что @qnikst выше упомянул

Alexander
07.08.2018
09:44:31
я кстати правильно понял что ekg собирает статистику RTS только если его пнуть?
судя по коду

Yuriy
07.08.2018
09:55:32
вопрос задавал @js_monk и про функции, а не списки
«разнородный»

kana
07.08.2018
10:03:21

Yuriy
07.08.2018
10:07:58

kana
07.08.2018
10:08:57
ну разве что когда нет переменных же
с типо-переменными без forall их тупо никак в скоуп не добавить, кроме разве что кейсов, когда они уже в скоупе в объекте, классе

Imants
07.08.2018
10:22:15
пример с forall:
https://en.m.wikibooks.org/wiki/Haskell/Existentially_quantified_types#The_forall_keyword

Yuriy
07.08.2018
10:24:36

A64m
07.08.2018
10:33:36
не надо переставать. если в произведениях, которые вы вместо "рекордов" будуте с суммами использовать, будет много всего, то вы с ПМ намучаетесь, а для рекордов всякие вайлдкарды есть

A64m
07.08.2018
10:34:40
после того, как дупликейт рекорд филдс появились вообще не вижу смысла не использовать рекорды всегда, как голые произведения их всегда можно будет конструировать и матчить - а наоборот - нет
(использовать геттеры для этих рекордов зато как раз не нужно, только сахар для пм)

Yuriy
07.08.2018
10:37:17

A64m
07.08.2018
10:37:45
все что я написал - про один тип с суммой.
матчи вроде такого Foo a s d f g h j k l - серьезная проблема, как по опасности ошибку сделать, так и по проблемам с расширяемостью произведения
проблема у вас была сначала от того, что вы использовали старый рекордовый сахар вроде r{ x = x + 1}
надо по возможность использовать леннартовский сахар, а не марковский

Admin
ERROR: S client not available

Yuriy
07.08.2018
10:53:32

Google

Yuriy
07.08.2018
10:53:54

A64m
07.08.2018
10:55:30
puns/wildcards
AFoo Foo | ABar Bar
похоже на два двойных чиха

Terminator
07.08.2018
13:05:11
@vveysner будет жить. Поприветствуем!

Александр
07.08.2018
13:44:46
Вопрос на засыпку.
Возможно ли в Haskell сделать так, чтобы при каждом вызове некоей полиморфной функции программист обязан был передавать всегда новый тип, иначе - ошибка компиляции? Интерес академический.

Alister
07.08.2018
13:45:58
newtype в смысле?

Александр
07.08.2018
13:47:04
Хоть newtype, хоть базовый тип, хоть Succ (Succ Zero). Сами типы можешь выбрать какие хочешь, лишь бы механизм продемонстрировать
Это вообще, видимо, сводится к хотелке невозможности вызвать одну и ту же функцию два раза с одним и тем же аргументом, что, скорее всего, противоречит самой сути языка. Но я таки не уверен

Алексей Ayaye :)
07.08.2018
13:49:06

Александр
07.08.2018
13:49:13
Ага

Алексей Ayaye :)
07.08.2018
13:50:03
Ага
только если значения других параметров будут отличаться. иначе функция не чистая

Александр
07.08.2018
13:50:28
Ну, ты, кажется, про рантайм уже говоришь. А я про компайлтайм
В рантайме такой механизм придумать легче легкого с запоминанием глобального состояния.

Denis
07.08.2018
13:51:52
тебе надо хранить где-то информацию о типах и проверять не попали ли они в той позиции и в том порядке

Александр
07.08.2018
13:52:29

Denis
07.08.2018
13:52:54
можешь не проверять, написать на тайплевеле чекер какой-то

Александр
07.08.2018
13:53:34

Dmitry
07.08.2018
13:54:19
Можно свести этот вопрос к зацикливаеию. Если один раз появилось - компилируется, если два и больше - зацикливание ?

Александр
07.08.2018
13:54:58
Да, так можно условие поставить

Dmitry
07.08.2018
13:55:43
Или так: нужно сделать так, чтобы функция f =...g...g... не компилировалась

Google

Александр
07.08.2018
13:56:00
Да :)

Dmitry
07.08.2018
13:56:15
Думаю, это как-то через типы, чтобы они не композились

Александр
07.08.2018
13:56:25
Может, что-нибудь из TH и квазиквот поможет?

Dmitry
07.08.2018
13:57:35
Думаю, если бы bottom убрать, то можно было бы такое провернуть...

Александр
07.08.2018
13:57:38
Гммм, а линейные типы это не позволили бы?

Dmitry
07.08.2018
13:57:45
Задачка интересная :)