@haskellru

Страница 1507 из 1551
Aleksey
10.10.2018
07:52:41
Так и есть. Экспортирует Prelude

Не надо так

Alexander
10.10.2018
07:57:54
кажется с @chshersh был недавно разговор по этому поводу

Aleksey
10.10.2018
08:00:41
Вообще это интересный вопрос - как поиметь в проекте свою Prelude (+ base без оригинальной) и не сломать ничего тем, кто потом отдепендится от пакета проекта и от оригинальной base (c искоробочной прелюдией)

Google
kana
10.10.2018
08:02:06
https://github.com/kowainik/relude#base-noprelude

вот тут он поясняет подход про свой Prelude

Alexander
10.10.2018
08:02:44
ломать userspace плохо

и ghci глобальный

> head, tail, last, init work with NonEmpty a instead of [a].

вот понаделают своих prelude с ерундой вместо фич

и полезного: Functions sum and product are strict now, which makes them more efficient.

Dmitry
10.10.2018
08:06:54
кажется с @chshersh был недавно разговор по этому поводу
Да, мне HVR лично потом написал, что Prelude плохо экспортировать, и я потом на грабли от этого тоже наткнулся. В Summoner просто еще это не пофиксили, потому что как либо не подразумевается использовать, а поставить как исполняемый файл раньше проблем не было)

Alexander
10.10.2018
08:07:15
cabal-install ставит либу если она есть

вроде же нельзя executable only

можно конечно сделать песочницу, собрать и добавить симлинк на executable

alexknvl
10.10.2018
08:07:51
Dmitry
10.10.2018
08:08:21
Вообще это интересный вопрос - как поиметь в проекте свою Prelude (+ base без оригинальной) и не сломать ничего тем, кто потом отдепендится от пакета проекта и от оригинальной base (c искоробочной прелюдией)
Сейчас, кстати, есть два способа целых. Один через base-noprelude, который мы рекомендуем (особенно хорошо для больших проектов), а второй — через миксины, но, думаю, со стеком работать не будет. Я не проверял, но есть у меня подозрение, что stack не поддерживает миксины.

Google
Dmitry
10.10.2018
08:08:56
вот понаделают своих prelude с ерундой вместо фич
Мы уже работаем над тем, чтобы добавить линейные и зависимые типы в нашу прелюду!

Alexander
10.10.2018
08:09:33
а это разве ерунда?
overrated во всяком случае

alexknvl
10.10.2018
08:09:47
я фаззил большой проект на много тысяч строк, head и т.д. падают достаточно часто, правда это скала

Dmitry
10.10.2018
08:10:48
cabal-install ставит либу если она есть
Я использовал cabal new-install и проблем не было. Когда делаешь cabal new-repl, то он каждый раз использует свое изолированное окружение, поэтому глобально установленная библиотека summoner не мешается.

Alexander
10.10.2018
08:11:20
интересно, ну у меня был старый cabal в том окружении, где я смотрел

Dmitry
10.10.2018
08:12:24
overrated во всяком случае
Я немного писал про мотивацию этого решения в комментарии на Reddit по мотивам блог поста. https://www.reddit.com/r/haskell/comments/9kuy7d/keep_your_types_small_and_your_bugs_smaller/e72vwiq

alexknvl
10.10.2018
08:12:42
каждый head - это потенциальная ошибка. скажем в 1% случаев ты не сумеешь точно определить, что список (всегда) не пустой. в достаточно большом проекте это будет куча багов

Dmitry
10.10.2018
08:13:47
Да, возможно, дело в этом. Я использовал cabal-install
Я хочу слегка внести ясность в терминологию. Билд тула называется cabal-install (иногда люди сокращают до более короткого но более неоднозначного cabal`). Но у этой тулы есть две команды: `cabal install и cabal new-install

alexknvl
10.10.2018
08:16:07
так же и про null говорят

Alexander
10.10.2018
08:16:09
я не помню 1 или 2 ошибки в большом проекте из-за head/tail

не скала правда

а haskell

~50kloc

при этом если у тебя бродит список, то конвертация его в NonEmpty ничего по сравнению с head не даст

Dmitry
10.10.2018
08:18:21
я не помню 1 или 2 ошибки в большом проекте из-за head/tail
У меня был случай из реальной жизни с проблемой с head. Это еще было до колл-стеков. Во время преподавания я написал тулу, которая генерирует рандомизированные красивые варианты в LaTeX для контрольных и теорминов по своему курсу. И когда первый раз запустил, то увидел: Prelude.head: empty list Я потом два часа искал ошибку...

alexknvl
10.10.2018
08:18:36
даёт, т.к. ты это делаешь рано, где можешь ошибки разумно обработать

Alexander
10.10.2018
08:18:44
нет

Google
Alexander
10.10.2018
08:18:59
или ты делаешь это и так и так и используешь NonEmpty в структуре

и тогда наличие медленного и дурацкого head не помогает

давайте так

любой кто хочет доказывать мне, что head в Prelude плохой

kana
10.10.2018
08:20:00
по своему скромному опыту скажу, что head используется очень редко, а когда используется, то список обычно инвариантно не пустой (что на типах не выражено)

Alexander
10.10.2018
08:20:08
напишет эссе на 3-4 абзаца по поводу того, почему он такой

и почему он так сделан был

(hint: потому, что NonEmpty не было - не ответ)

alexknvl
10.10.2018
08:23:34
76клок, 6 багов с head в Scala 3 компиляторе, 8 c null, 8 с partial match, 2 с индексацией, 10 с кастами (считай partial match), и дохрена с `assert`ами. все эти баги - следствие недостаточного использования системы типов

alexknvl
10.10.2018
08:24:07
и порядок у них один и тот-же, ~1 баг на 7клок

Alexander
10.10.2018
08:24:26
нормальное решение с head это было бы liquid types

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

будет меньше проблем

Oleg
10.10.2018
08:25:02
(hint: потому, что NonEmpty не было - не ответ)
Потому что завтипов не было

Норм?

Alexander
10.10.2018
08:25:13
в NonEmpty их тоже нет

но вообще если бы были, то наверное проблема бы решилась

Oleg
10.10.2018
08:25:43
Но я специально не упоминал его, чтобы соответствовать требованиям рецензента

Google
Alexander
10.10.2018
08:26:08
=)

kana
10.10.2018
08:26:09
не ну nonempty это вполне себе некое веяние завтипа, "синглтон свойства непустоты"

Alexander
10.10.2018
08:26:44
ну это структура, которая описывает инвариант, который там должен быть

Oleg
10.10.2018
08:27:31
веяние завтипа

Как сформулировать задачу, чтобы Гранин не сказал "фримонада" ?

Alexander
10.10.2018
08:33:49
это вопрос про то, эквивалентом инструмента какой мощности является freemonad?

я думаю через них можно много почти все выразить

kana
10.10.2018
08:35:42
даже indexed free monad

Oleg
10.10.2018
08:36:19
даже indexed free monad
Эт как? И про какую индексацию речь?

alexknvl
10.10.2018
08:36:55
тогда уж graded и с free monoidом, чтобы совсем free было

Oleg
10.10.2018
08:37:16
Про ту, где два индекса или один?

kana
10.10.2018
08:38:45
да ничего особенного, IFree f i j a = Pure :: a -> IFree i i a Join :: f i j (IFree j k a) -> IFree i k a run :: (forall ... f i j a -> m i j a) -> (IFree f i j a -> m i j a)

Oleg
10.10.2018
08:39:26
Мне кажется у Pure должны совпадать

А у джойн котнрсимметрично связываться

Ага

Но это всё-таки indexed free, а не индексированная монада через free

Александр
10.10.2018
09:05:07
Как сформулировать задачу, чтобы Гранин не сказал "фримонада" ?
Собираюсь поизучать FT поближе. Есть у меня подозрения, что с ней удобного разделения на чисто рантаймовые штуки и интерфейсные не получится.

Вот накидайте, плиз, кода из production, где FT используется с показательным качеством

Alexander
10.10.2018
09:09:53
FT?

Google
Alexander
10.10.2018
09:09:59
Final tagless?

Александр
10.10.2018
09:10:06
Да

Alexander
10.10.2018
09:10:26
будет выглядеть как: foobar :: MonadQ m, MonadBar m) => bla-bla -> m ()

в контексте все capabilities

Александр
10.10.2018
09:11:21
Ну, это я знаю, да. Мне бы хотелось именно на код посмотреть. Вопрос не в синтаксисе все же, а в дизайне интерфейса eDSL (вот этих вот параметров bla-bla, которые передаются обычно в функции, и что возвращается в итоге)

Alexander
10.10.2018
09:12:22
@chshersh, тут @VividDesires спрашивает про servant-generic, можешь про опыт рассказать

Leonid
10.10.2018
09:16:07
head используется только совместно с group

Alexander
10.10.2018
09:16:44
head используется там, где ок, а ещё к функции его использующей добавляют HasCallStack

на head который ругается если в контексте нету HasCallStack я бы может и согласился

@VividDesires @chshersh от меня вопрос кстати, а как в servant-generic с nested endpoints?

Александр
10.10.2018
09:18:18
Я за то, чтобы head был unsafe. Я намучался с сейфным head в PureScript. Нифига не удобно

Alexander
10.10.2018
09:18:35
через пачку типов вложенных?

A64m
10.10.2018
09:18:56
делать колстековый констрейнт для СТРАШНЫХ ЧАСТИЧНЫХ ФУНКЦИЙ было бы еще разумным для альтернативных прелюдий, да

Александр
10.10.2018
09:19:00
Alexander
10.10.2018
09:19:12
? Не понял вопроса
другая ветка, игнорируй ;)

Anton
10.10.2018
09:19:21
через пачку типов вложенных?
Вложенные структуры

Alexander
10.10.2018
09:19:39
Вложенные структуры
и ещё для всяких servant-swagger и т..п как работать будет

Anton
10.10.2018
09:19:40
в поле просто структура подапи лежит

Alexander
10.10.2018
09:19:52
т.е. у меня есть тип, какой-нить типа Description "Blabla"

Anton
10.10.2018
09:19:55
сваггер вроде работает, но надо проверить

Alexander
10.10.2018
09:20:15
ну не важно, например я свой тип ввожу, о котором автор точно не в курсе

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