@haskellru

Страница 1391 из 1551
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
вот так можно func :: forall c. c -> IO () func cVal = do someFunc @c
Гм, вот оно что, спасибо. Там в доке сказано, что forall не обязательно.

Yuriy
07.08.2018
06:12:03
Гм, вот оно что, спасибо. Там в доке сказано, что forall не обязательно.
в каких-то случаях обязательно, чтобы отличить от обычной полиморфной сигнатуры

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

Александр
07.08.2018
06:13:44
func :: c -> IO () func (cVal :: c) = do someFunc @c вот так можно без квантора, кажется
Хм. А такой вариант будет работать? func :: forall c. SomeClass c => IO () func = do someFunc @c

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

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

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

Александр
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
Объясните новичку. пожалуйста. Зачем нужен forall? Разве без него функция не остается полиморфной?
а без него нельзя. Даже если ты его не пишешь, ghc его неявно дописывает но иногда приходится писать явно

Yuriy
07.08.2018
10:07:58
а без него нельзя. Даже если ты его не пишешь, ghc его неявно дописывает но иногда приходится писать явно
как это нельзя? без него можно. даже если ты его явно пишешь, GHC ругается на синтаксис

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

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

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

(использовать геттеры для этих рекордов зато как раз не нужно, только сахар для пм)

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

Google
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). Сами типы можешь выбрать какие хочешь, лишь бы механизм продемонстрировать

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

Александр
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
тебе надо хранить где-то информацию о типах и проверять не попали ли они в той позиции и в том порядке

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
Задачка интересная :)

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