Cheese
попробуйте import Prelude
Cheese
:load вообще для другого
:load загружает файлы-модули, а не модули из пакетов. для модулей из пакетов есть import и :module
Д.
stack идет вместе с Haskell Platform. Ставится автоматически со вторым вместе
Д.
Лучше было отдельно не ставить
Ilya
Лучше было отдельно не ставить
Это верно. Ставил сначала просто платформу погонять, но потом stack понадобился.
>для модулей из пакетов есть import и :module
Попробую завтра, на этом пк такая ошибка не воспроизводится, спасибо
A64m
новая эра продлилась недолго
https://github.com/ghc/ghc/commit/d728c3c578cc9e9205def2c1e96934487b364b7b
a66ath
Как нет регистров?
a66ath
Собрал таки свой проект
a66ath
Завендорил телеграм апи
кана
хм, вообще это не работает
кана
нужен способ генерить уникальные индексы на тайплевеле
кана
https://gist.github.com/kana-sama/2134f4b1793422865284fbd2c063a5df
кана
вроде бы если при read убирать индекс из контекста, получится что-то вроде линейщины
Oleg
Это по мотивам blah?
кана
да
Oleg
Что-то вроде линейщины вряд ли получится.
Для этого нужно иметь по паре контекстов-индексов и уметь их сплиттить /склеивать
Oleg
Хотя может и одного хватит
Oleg
https://gist.github.com/kana-sama/2134f4b1793422865284fbd2c063a5df
Ну и максимум здесь неверный подход.
Если из индеса будет удалена последняя переменная, а ссылку на неё припрячут.
То после выделения новой переменной, можно будет незаконно использовать припрятанную, ведь номера у них будут одинаковые.
Нужен монотонно инкрементируемый счётчик
Alexander
Что это? Для чего?
Alexander
Почему на тайп левеле?
Oleg
Ну вот надо не только писать в blah но и иногда читать его
Alexander
Среди вашего флуда про квантмех трудно найти что-то полезное
Oleg
Ну вот как раз после них
Oleg
Исходные рассуждения Вершилова и А64 были про компакты, которые можно транспортить, не копируя, если известно, что ссылок на них нет.
Я что-то вбросил про Идрис и Вершилов сказал, что можно и индексед монадкой справиться
Alexander
А, ясно, академщина
Oleg
Ну как, рассуждения (не мои) были по мотивам продового перфоманса
Oleg
Не знаю, какая тут академщина. Жиза
a66ath
hie не умеет в new-build
a66ath
Но мне это и не нужно, буду как кметт, ручками все писать
Alexander
поидее там нужно что-то вроде RankN не знаю как правильно сработает попозже попытаюсь сделать (но это не точно)
Alexander
@graninas суть простая, в расте можно добиться большей безопасности работы с ресурсами и убрать use after frwet
Alexander
free
Alexander
а у нас можно только регионами, которые не позволяют early free, которые (апстримовые) не работают с конкурентностью
Alexander
Ну, я такое могу сделать тоже. На фри монадах, ясное дело
Alexander
вопрос в том можно ли в текущем сеттинге добиться похожего в сабже
Alexander
не можешь конечно
Alexander
Могу
Alexander
как у них с rank2?
Alexander
rankn
Alexander
без них ты не сможешь сделать защиту на typelevel
Alexander
и тебе нужны будут индексированные монадки
Alexander
Зачем на тайп левеле? Достаточно в рантайме
Alexander
нет
Alexander
в рантайме любой дурак может завернув ресурс в мварь
Alexander
без прямого доступа
Alexander
Почему нет? Зачем усложнять? Во всех промышленных языках в рантайме делается
Alexander
я вроде начал с описания ситуации?
Alexander
Мварь тоже помодет, да
Alexander
в расте не в рантаймк
Alexander
Ну и молодец, rust. Хорошо придумал
Alexander
да, там линейные типы хорошо легли
Alexander
Ну хорошо, если будет в Хаскеле. Но если надо ехать, а не шашечки, то просто надо брать и использовать кондовые практики. Они, по крайней мере, всем знакомы, и их accidental complexity не высокая.
a66ath
fizruk здесь есть?
Anatolii
он быстрее в gitter ответит
Anatolii
я его там находил
кана
кана
если спрятать и получится, то использовать - нет, но только в пределах одного блока, нужно RankN как-то впилить
кана
например смещать на неизвестный n все индексы
кана
зря удалил,
type family Elem' x xs where
Elem' x '[] = False
Elem' x (x : xs) = True
Elem' x (y : xs) = Elem' x xs
type Elem x xs = Elem' x xs ~ True
type family Without x xs where
Without x '[] = '[]
Without x (x : xs) = Without x xs
Without x (y : ys) = y : Without x ys
Couldn't match type
‘Elem' (1 + n) (Without n '[1 + n, n])’
with
‘'True’
почему не может посчитать?
саша
в расте не в рантаймк
Тут важно то, что у раста ещё и гц нет. А если захочется его прикрутить к чему-то, то надо явно передавать владение чем-то гц.
Alexander
угу
кана
Couldn't match type ‘n + 2’ with ‘(n + 1) + 1’
как и 2 + n with 1 + (1 + n)
кана
вообще плохо чет работает все с неизвестной n
Alexander
там плагины надо или аскиомы через unsafeCoercr
Ilya
попробуйте import Prelude
> :m Prelude
<no location info>: error:
Ambiguous module name ‘Prelude’:
it was found in multiple packages: base-4.11.1.0 summoner-1.1.0.1
Хм, возможно, дело в том, что ghci сам не смог разрешить эту неопределенность. Но stack ghci может.
Дальше я сделал так:
$ ghc-pkg unregister summoner
ignoring (possibly broken) abi-depends field for packages
После чего ghci заработал, как ожидается.
Но такие конфликты могут, наверное, возникнуть и в будущем. Возможно ли их избежать превентивно?
кана
в принципе это не нужно, достаточно просто добавить еще один фантом
кана
https://gist.github.com/kana-sama/20086dacb9a29bd10b041660a166d6f9
кана
теперь рефы не убегут из скоупа (вниз тоже), и все новые рефы имеют уникальный айди
Aleksei (astynax)
Aleksei (astynax)
А ещё стоит зарепортить баг, потому как пакеты, экспортирующие неймспейс Prelude, это моветон
Cheese
Aleksei (astynax)
Aleksei (astynax)
Так и есть. Экспортирует Prelude
Aleksei (astynax)
Не надо так
Alexander
кажется с @chshersh был недавно разговор по этому поводу
Aleksei (astynax)
Вообще это интересный вопрос - как поиметь в проекте свою Prelude (+ base без оригинальной) и не сломать ничего тем, кто потом отдепендится от пакета проекта и от оригинальной base (c искоробочной прелюдией)
кана
https://github.com/kowainik/relude#base-noprelude
кана
вот тут он поясняет подход про свой Prelude