@haskellru

Страница 1392 из 1551
Dmitry
07.08.2018
13:59:21
Надо думать

Ilya
07.08.2018
14:00:08
Может, что-нибудь из TH и квазиквот поможет?
Здесь уже ничего не поможет...

Dmitry
07.08.2018
14:00:55
Наверное, надо доказать (от противного), что такая конструкция не возможна

Александр
07.08.2018
14:01:03
Кстати, такой вариант, судя по всему, тоже должен ломаться: (g x, g x) (просто пара значений этой особенной функции)

Google
Dmitry
07.08.2018
14:01:09
Кто уже прочёл TAPL и сможет?

Ну вот как-то так: пусть такая конструкция возможна и f=...g...g... не компилируется. Тогда рассмотрим const id f, в ней второй аргумент не используется, вроде, должен отбрасываться. То есть, скомпилируется. Примерно так...

Александр
07.08.2018
14:10:36
Я не очень понимаю, но кажется, ленивость не должна тут влиять

The mirror
07.08.2018
14:11:31
Вопрос на засыпку. Возможно ли в Haskell сделать так, чтобы при каждом вызове некоей полиморфной функции программист обязан был передавать всегда новый тип, иначе - ошибка компиляции? Интерес академический.
Действительно, интересная задача. Вспомнил, что видел в доках Dotty что-то похожее, там была реализация стейт-машины в компайл тайме, вроде это что-то похожее. Но это не Haskell. http://dotty.epfl.ch/docs/reference/erased-terms.html

Александр
07.08.2018
14:12:58
Вот было бы круто, если бы такое расширение было в GHC. Можно было бы создавать функции вроде resource <- aquireResource resourceDef и closeResource resource и не бояться, что какая-то из функций вызовется дважды. Но это описание уж очень смахивает на то, что @qnikst про линейные типы рассказывал

Alexander
07.08.2018
14:15:18
линейные типы такого прям не дадут

давай разбираться

пусть у нас будет магическая функция foo

foo 1 можно в двух местах проекта написать?

это осмысленно?

можно ли написать foo (op a b)

Google
Alexander
07.08.2018
14:16:34
но видимо функции пофиг на значение, ей только тип важен?

вообще ничего не мешает функцию заделать идемпотентной

Denis
07.08.2018
14:17:03
если только тип, то как-то через прокси

Dmitry
07.08.2018
14:17:06
Не, погодите-ка. Это компилятору, получается, надо обнаружить одинаковые вычисления. А это - заявка на решение проблемы останова. Так что не получится

Alexander
07.08.2018
14:17:14
хранить set типов на которых вызвано, и mvar

при вызове проверять вызывалась ли, и если да то noop

дёшево и сердито

Dmitry
07.08.2018
14:17:35
Это в рантайме

Alexander
07.08.2018
14:17:59
тут нету вычислений, не важно ж значение (наверное)

нас попросили один раз для типа

Александр
07.08.2018
14:18:32
Значение, в общем случае, не важно, да

Dmitry
07.08.2018
14:18:55
А компилятор энергично типы проверяет? Можно на типах сэмулировать ленивость?

Alexander
07.08.2018
14:19:06
нет

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

Alexander
07.08.2018
14:20:07
т.е. если есть какая типофамилия сопоставляющая скажем Int и тип, то можно сделать что она будет объявлена один раз

для каждого типа, поможет ли это хз

Denis
07.08.2018
14:20:27
что если иметь HSet + HList c типами, что были вызваны? ну проверять есть ли такие типы в коллекции или нет

Александр
07.08.2018
14:20:33
А компилятор энергично типы проверяет? Можно на типах сэмулировать ленивость?
Сразу же вопрос: на тьюринг-полной системе типов можно эмулировать любую вычислительную функцию. А что с ленивостью?

Alexander
07.08.2018
14:21:01
вообще какое-то желание поднять линейные типы на уровень выше

Google
Alexander
07.08.2018
14:21:33
ага, которых нету уже

насколько я знаю теории в этом направлении нету

но вообще на XY похоже

Denis
07.08.2018
14:22:07
Alexander
07.08.2018
14:22:14
все тип

Александр
07.08.2018
14:22:34
Это еще 8 лет будет продолжаться, все норм :)

Или я путаю?

Yuriy
07.08.2018
14:22:39
я не понимаю математический смысл этого. ведь f x ... f x ≡ y ... y where y = f x. то есть эти ситуации неотличимы

Denis
07.08.2018
14:22:47
все тип
хм, но поднимать все равно надо через плагины или синглтоны?

Dmitry
07.08.2018
14:23:09
Ну если бы была ленивость на типах, мы могли бы сделать что-то типа Const a b, где b лениво тайпчекался. Тогда туда можно было бы запихать f=....g....g..., то есть в таком лениво тайпчекере можно было бы обойти ограничение на единичность.

Александр
07.08.2018
14:24:29
Значит ли это, что есть некая семантика, которая невыразима в системе типов?

Yuriy
07.08.2018
14:24:35
наверно, можно через TH в компайлтайме (рантайме TH) записывать каждый тип в глобальную переменную

Denis
07.08.2018
14:24:40
ну еще можно идексировать типы, и чтобы не совпадали индексы при вызове

Yuriy
07.08.2018
14:24:54
Denis
07.08.2018
14:25:40
индексация временем :D тогда точно никогда не совпадет

Александр
07.08.2018
14:25:53
Хе-хе

это значит, что в твоей хотелке нет семантики
Я не понимаю. Что мне помешает проапдейтить GHC, чтобы при разборе некоторого AST он смотрел, есть ли такое AST уже или нет.

Google
Denis
07.08.2018
14:27:59
и потом сравнивать только аннотации

Александр
07.08.2018
14:29:23
Все, здесь я уже перестал что-либо понимать. ? То есть, вы говорите, что задача некорректна?

Denis
07.08.2018
14:31:57
a monadplus is just a near-semiring in the category of endofunctors what the problem?

Yuriy
07.08.2018
14:32:09
Все, здесь я уже перестал что-либо понимать. ? То есть, вы говорите, что задача некорректна?
я думаю, она в каком-то смысле корректна, но её невозможно решить и от неё нет пользы

Александр
07.08.2018
14:32:28
Prove it!

Denis
07.08.2018
14:32:48
ну как бы всегда можно пойти от обратного)

а потом чтд или не чтд

Yuriy
07.08.2018
14:34:19
Prove it!
я выше писал, что в семантике Хаскеля f x + f x и y + y where y = f x эквивалентны. следовательно, ты можешь решить свою задачу в рамках AST, но не в рамках Хаскеля

Александр
07.08.2018
14:35:32
Ну ладно. Хотя, может, тут новый синтаксис можно было бы ввести

Admin
ERROR: S client not available

Yuriy
07.08.2018
14:36:02
я выше писал, что в семантике Хаскеля f x + f x и y + y where y = f x эквивалентны. следовательно, ты можешь решить свою задачу в рамках AST, но не в рамках Хаскеля
на практике эта эквивалентность выливается в то, что компилятор может несколько одинаковых вхождений заменять на одно, чтобы не перевычислять, или наоборот, одно вхождение инлайнить в разные места

Dmitry
07.08.2018
14:41:29
Сразу же вопрос: на тьюринг-полной системе типов можно эмулировать любую вычислительную функцию. А что с ленивостью?
Если система ттюринг-полная, то на ней можно смоделировать присваивание ячейке и проверку ячейки на значение, так? Ну так пусть в начале работы этой Штуки будет создана ячейка с "0", а первое использование функции проверит, что в этой ячейке. Если 0, то запишет туда 1, если не 0, то выдаст ошибку компиляции. Всё просто ;))

Alexander
07.08.2018
14:53:13
а можно узнать саму задачу-то?

Alexander
07.08.2018
15:05:13
это максимум ката какая-то из разряда because I can

это может быть решением какой-то задачи, но не самой задачей

Google
kana
07.08.2018
15:06:58
Alexander
07.08.2018
15:08:37
это не решит проблему

kana
07.08.2018
15:09:30
это не решит проблему
Почему? Это не даст нам вызвать функцию дважы и даст возможность менять тип аргумента (инкрементить нат в фантоме там)

Alexander
07.08.2018
15:10:02
а то, что вернул я ещё раз с аргументос того же типа вызову

Foo xs = Foo (forall a. a NotIn xs => a -> Foo (a:xs)) и такую штуку линейно еще

тогда взлетит

kana
07.08.2018
15:13:04
newtype F (n :: Nat) = F { runF :: Proxy n -> Int -> (F (S n), String) }

и вот в скоуп, где нужна эта функция, передать линейно F Z

Alexander
07.08.2018
15:14:34
ну здесь только один домен для типов

так не интересно

то, что выше это в общем-то тоже самое

м нужны линейные типы чтобы запустить

IC
07.08.2018
15:30:43
я правильно понял, что tasty не умеет свои группы параллельно гонять, а tasty-hedgehog заворачивает только отдельные кейсы, но не [параллельные] группы?

IC
07.08.2018
16:00:13
почему странно? деревья там только для группировки

Yuriy
07.08.2018
16:01:58
почему странно? деревья там только для группировки
да, было бы странно, если бы не умел параллелить

IC
07.08.2018
16:06:21
Features: * Run tests in parallel but report results in a deterministic order хех.. первым же пунктом.

Hot
08.08.2018
07:38:28
Что почитать по Haskell, если самые азы как-то осилил, но того, о чём в это чате пишут, до сих пор не понимаю?

Imants
08.08.2018
07:40:36
я тоже мало чего понимаю. Это норм. ☺️

sherzod
08.08.2018
07:41:11
Бездонный язык

Hot
08.08.2018
07:41:19
И нет желания начать понимать?

Dmitry
08.08.2018
07:41:35
Изучаю Haskell больше трех лет и тоже не все понимаю, что пишут в этом чате. Вообще, понимание этого чата не является показателем понимания языка.

Imants
08.08.2018
07:42:01
И нет желания начать понимать?
"хочу купить козу - не имею возможности.."

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