
Oleg
02.09.2018
11:44:41

Pineapple
02.09.2018
11:46:53
Но рефкаунт есть.

Гриша
02.09.2018
12:42:48

Terminator
02.09.2018
12:55:55
@seqai будет жить. Поприветствуем!

Google

Artem
02.09.2018
13:31:58
Всем привет.
У меня есть возможность в Haskell сделать литеральный тип вроде такого:
```type NaturalNum = 1 | 2 | 3```Или как поступать в том случае, если хочешь ограничить аргумент на уровне типа?
P.S.
Хотелось бы сделать подмножество определенного типа

kana
02.09.2018
13:36:53
1) One | Two | Three
2) пруф-типы
module OneTwoThree (make, get) where
newtype OneTwoThree = OneTwoThree { get :: Int }
make :: Int -> Maybe OneTwoThree
make x | x elem [1, 2, 3] = Just $ OneTwoThree x
| otherwise = Nothing
module Main where
import qualifed OneTwoThree
import OneTwoThree (OneTwoThree)
f :: OneTwoThree -> String
f (OneTwoThree.get -> 1) = "1"
f (OneTwoThree.get -> 2) = "2"
f (OneTwoThree.get -> 3) = "3"
main = do
input <- read <$> getLine
case OneTwoThree.make input of
Just x -> putStrLn (f x)
Nothing -> do
print "error"
main

Ilya
02.09.2018
13:45:40

Artem
02.09.2018
13:46:48
Спасибо)

A64m
02.09.2018
13:47:11
смотря для чего тип, если для каких-то проверок, то лучше ликвид хаскель
если для выведения кода - ликвид хаскель не годится, придется с синглетонами страдать

Terminator
02.09.2018
15:08:34
Ivan будет жить. Поприветствуем!

Alexander
02.09.2018
15:42:55
Как это?
Все переменные в словаре, на словарь можно сослаться

Terminator
02.09.2018
16:43:37
Cesare Borgia будет жить. Поприветствуем!

Блаженный
02.09.2018
16:43:52

Terminator
03.09.2018
01:40:49
@eliascygnus будет жить. Поприветствуем!

A64m
03.09.2018
09:07:13
удивительно, но ни на реддите, ни в рассылочках сегодня я не нашел ничего, от чего бы я разрывался от злости.
но твиттер не подвел:
> When You Should Use Lists in Haskell (Mostly, You Should Not)

Alexander
03.09.2018
09:11:59
Ты про эту прекрасную статью? http://www.imn.htwk-leipzig.de/~waldmann/etc/untutorial/list-or-not-list/

A64m
03.09.2018
09:13:02
про ее более новую версию https://arxiv.org/pdf/1808.08329.pdf

Google

Alexander
03.09.2018
09:13:53
Так нормальная статья вроде

A64m
03.09.2018
09:14:01
нет

Alexander
03.09.2018
09:14:04
там пишется про то что если вы хотите !! или sort то вам нужен не List
экспрессивно но видимо накипело у человека

A64m
03.09.2018
09:14:27
это не верно

Alexander
03.09.2018
09:14:38
почему?

Andrey
03.09.2018
09:16:41

A64m
03.09.2018
09:17:21
потому что использовать !! для получения какой-то n-ой итерации полностью нормально, плохо многократно запрашивать что-то из списка по индексу, но это и ежу понятно, для этого статьи писать не надо
также списковый сорт обладает кучей полезных свойств, которые в хаскельной экосистеме заменить просто нечем, например у него хорошая производительность на в основном упорядоченных последовательностях

Alexander
03.09.2018
09:18:45
ну в целом логично
хотя это уже ближе к низкоуровнему хакингу имхо

A64m
03.09.2018
09:19:38
я уж не говорю, что единстенная альтернатива sort в хаскеле - это отдельный полумертвый пакет
вообще стандартный список одна из немногих вещей в хаскельной экосистеме 1) более-менее доделанных 2) заметно лучше чем аналогичные инструменты в других языках (обычно зоопарк из итераторов и костылей для матчинга и мемоизации)

Dmitry
03.09.2018
09:25:40
а что ещё по п.1 не хватает?

Index
03.09.2018
09:25:59
Итераторы хоть effectful, а на списках-то не выйдет, нужны всякие кондуиты
Которые уже не такие супер доделанные

A64m
03.09.2018
09:26:26
да
а что ещё по п.1 не хватает?
не все оптимизируется, что уже умеют оптимизировать, некоторых важных утилит нету из коробки (вроде делителя на чанки и композиционного сворачивателя)

Ilya
03.09.2018
10:07:25
нет
Он ещё и хаскель преподает

Андрей
03.09.2018
10:08:07
потому что некто Александр Вершилов 100 раз говорил, что листы в сабже это скорее не датаструксчи а контрол струкчи и юзать их надо соответственно

Ilya
03.09.2018
10:11:43
Я помню экспериментировал с (!!) и обнаружил, что он очень быстрый. Намного более быстрый, чем кажется из его рекурсивного определения

Google

A64m
03.09.2018
10:12:21

Alexander
03.09.2018
10:25:27
угу
но вот цикл из !! будет плохим
если реализовать разворачивание списка через length и !!

A64m
03.09.2018
10:44:59
вот с эффектами да, проблема, и даже доп.пакетами как следует не решенная, не то что из коробки. может в каком-то более лучшем хаскеле можно было что-то вроде стриминга использовать для всего, в том числе и вместо списков, но гхц не сможет такие стримы соптимизировать до аналогичной спискам производительности в случае Identity "эффекта"
Ну и понятно, что эта-то проблема с статье вообще не обсуждается
разумеется, автор заявляет, что списки это такие интераторы и нужно их использовать соотвествующим образом, но не понимает, что они более-менее нормальные итераторы в том числе и потому, что сносные коллекции (итератору в некоторых случаях надо материализовать коллекцию, чтоб не перевычислять заново результаты, для итераторов обычно адовые костыли городят для этого)

Dmitry
03.09.2018
10:59:24
угу
А что значит, "контрольная структура"?

Alexander
03.09.2018
10:59:36
структура определяющая control flow программы
т.е. та по которой происходит выполнение, например список ~ цикл
для такой структуры не обязательно а. существование в целом, б. они может быть вычислена не полностью и может быть в любой момент остановка


A64m
03.09.2018
11:04:46
но одна из главных причин, почему у меня так бомбануло, это именно подача материала
мой любимый отрывок:
> At the very top of the page, it presents example code that is supposed to highlight typical features of the language. We see a version of Eratosthenes’ sieve that generates an infinite list of primes. Declarative it certainly is. But see - Lists, numbers. Must be typical Haskell.
> Also, that example code features list comprehensions - that’s more syntactic sugar to misguide beginners. And it claims “statically typed code” in the previous line, but - there is no type annotation in the code. Yes, I know, the types are still there, because they are inferred by the compiler, but what do es a beginner think?
МЕНЯ АЖ ТРИСЕТ
А что значит, "контрольная структура"?
контрол-структура оптимизирована для передачи данных между функциями (и соотвественно может материализоваться не полностью, позволяет ранний останов и прочие фичи), в отличие от структур которые оптимизируют футпринт по памяти для хранения полностью материализованной структуры или там оптимизируют поиск


Dmitry
03.09.2018
11:07:22
Ага, так понятней
А что, автор той статьи какой-то именитый дядька? Какая разница, что кто-то неправ в интернете?

A64m
03.09.2018
11:09:08
нет, но чтоб меня затроллить знаменитым быть не обязательно

Alexander
03.09.2018
11:09:26
решето эратосфена кстати крутая задача
можно давать джунам, если у них вместо маркерной доски что то нормальное

Ilya
03.09.2018
11:19:44

Google

Ilya
03.09.2018
11:19:55
что решето на хаскеле типа не решето, т.к. слишком медленное

A64m
03.09.2018
11:20:02
ладно, мою любимую часть можно еще больше сконцентрировать
> it claims “statically typed code” in the previous line, but - there is no type annotation in the code
это т.н. "решето тернера"

Misha
03.09.2018
11:20:32

A64m
03.09.2018
11:21:56
(на самом деле решето тернера по-другому выглядит, но это тоже так называют)

Ilya
03.09.2018
11:24:40

A64m
03.09.2018
11:27:01
твит двухдневной давности, слишком поздно отвечать уже

Yuriy
03.09.2018
11:34:51

A64m
03.09.2018
11:43:10
я смотрю, пол филипс хаскель изучает
может хоть покритикует хаскель нормально, а то нормальной критики мало

Denis
03.09.2018
11:45:00

A64m
03.09.2018
11:46:19
основной контрибьютор (бывший) в скалистый компилятор (будующий бывший), широко известный в узких кругах докладами о том, какое скала говно

Denis
03.09.2018
11:47:56

A
03.09.2018
11:48:10
скала говно, говно имеет право на существование )

Alex
03.09.2018
11:48:28

A64m
03.09.2018
11:48:33

Alex
03.09.2018
11:49:04
Де Гоуз который
Прикольная тенденция

Denis
03.09.2018
11:49:34

Google

Alex
03.09.2018
11:49:50

A64m
03.09.2018
11:50:40
Это нормальный подход. если пользуешься чем-то нужно объяснять почему это говно, чтоб исправить ошибки (этого филипс, правда, не добился, но хоть попытался)
хаскелистам такого здравого отношения к хаскелю обычно очень нехватает

Alex
03.09.2018
11:56:21

A64m
03.09.2018
11:56:30
вообще, завидую скалистому комьюнити, они там так бодро дискутируют, а у хаскелистов один эхочамбер и серклджерк. Разве что раз в полгода стек вс кабал (скоро очередная серия будет, когда снойманиты замену хекеджу выкатят)
правда скаладелы на все это плюют, так что вся дискуссия напрасна - вот этому не завидую, конечно

Ilya
03.09.2018
11:57:07

A64m
03.09.2018
11:57:47
так и хаскель говно

Alex
03.09.2018
11:57:54
Твои мемориз - твои критерии, не спорю

A64m
03.09.2018
11:58:08
нашел поиском за три секунды

Alexander
03.09.2018
12:04:54
имхо достаточно просто для джуна все же