@scala_ru

Страница 823 из 1499
Nick
14.07.2017
12:36:37
ну или как предложил чувак на видел с туплами

Oleg
14.07.2017
12:36:47
а они сильно нужны?
Да, удобней писать [A, B, C, D, E], а не A :: B :: C :: D :: E :: HNil или (A, (B, (C, (D, E))))

Nick
14.07.2017
12:37:20
A,B,C,D,E это не лист может быть

Oleg
14.07.2017
12:37:23
тем более не A :+: B :+: C :+: D :+: E :+: CNil

Google
Oleg
14.07.2017
12:37:49
A,B,C,D,E это не лист может быть
ну это хачкелевский синтаксис квадраных скобок

в скалке хз что

Nick
14.07.2017
12:38:09
а в скалке придется делать круглые)

или <>

Oleg
14.07.2017
12:38:19
круглые - тюплы

Nick
14.07.2017
12:38:45
тюпл в лист ж можно законвертить

не проблема

Oleg
14.07.2017
12:38:57
Nick
14.07.2017
12:38:59
хочешь лист на лист, хочешь тюпл - на тюпл

Oleg
14.07.2017
12:39:46
Вот в идрисе (A, B, C, D, E) = (A, (B, (C, (D, E))))

В скалке можно если не так, ну хотя бы пару методов сделать у тюплов

пару тайпмемберов

хочешь лист на лист, хочешь тюпл - на тюпл
Т.е. если у тебя ((A, B ,C), (D, E), (F,)) - тебе целую индукцию конверсий нужно делать

Google
Nick
14.07.2017
12:41:39
не, ну эт частный случай

Т.е. если у тебя ((A, B ,C), (D, E), (F,)) - тебе целую индукцию конверсий нужно делать
а прикинь воббще какого это разворачивать на этапе компиляции? Конечно там явно будет ограничение, но придется ждать )

Nick
14.07.2017
12:44:52
ну допустим у тебя лист листов, по 255 элементов)

Oleg
14.07.2017
12:44:57
нет особых проблем, чтобы копродукт хлистов развернуть

ну штуки типа копродукт из 5 хлистов по 5-6 штук достаточно быстро компилится с кучей фигни

Nick
14.07.2017
12:45:41
5-6 понятное дело

Oleg
14.07.2017
12:45:51
А учитывая сабиновский пулреквест с индуктивными имплиситами вообще фигня

Это даже были не просто копродукты и хлисты, а юнионы и рекорды

Nick
14.07.2017
12:47:10
кстати вот юниуны эт круто

Oleg
14.07.2017
12:47:38
кстати вот юниуны эт круто
Ну я имею в виду шэйплеззовские юнионы, т.е. именованные копродукты

не доттивские

Mikhail
14.07.2017
12:50:04
кстати о хлистах. следствием реализации в шейплесе является: val hlist:String :: Int :: HNil :: String :: HNil = null def size[H <: HList, N <: Nat](h:H)(implicit len:Length.Aux[H, N], toInt:ToInt[N]) = toInt() println(s"hlist: ${size(hlist)}") hlist: 4

Mikhail
14.07.2017
12:57:29
https://scastie.scala-lang.org/Odomontois/U4NchnQxSfK5l7KaIrsU8A/1 это и просто в скале так
как же это правильно, если логика нил-терминатора нарушается? это именно, что следствие)

Oleg
14.07.2017
12:58:02
у тебя список из четырёх типов, один из которых - пустой HList

?Ivan
14.07.2017
12:59:26
Oleg
14.07.2017
12:59:44
Google
Denis
14.07.2017
12:59:51
нет

это просто лист Any :)

Oleg
14.07.2017
13:00:32
это просто лист Any :)

Denis
14.07.2017
13:01:25
List(1, 2, List(), 3): List[Any]

Mikhail
14.07.2017
13:02:21
у тебя список из четырёх типов, один из которых - пустой HList
об этом и речь, что нил то конец списка, то пустой список. семантика нила меняется. если бы Сабин не требовал хнил указывать в конце для String :: Int, то было бы более логично

Oleg
14.07.2017
13:03:00
Oleg
14.07.2017
13:03:59
Мне совершенно страшно представить деривацию для String :: Int

Mikhail
14.07.2017
13:03:59
список, который начинается со своего конца и есть пустой список. Сабин всё сделал совершенно обычно
а список который содержит в середине себя конец списка чем является?

Oleg
14.07.2017
13:04:16
а список который содержит в середине себя конец списка чем является?
список, один из элементов которого - пустой список

Что с HListами Hlist ов не работал?

Oleg
14.07.2017
13:05:24
Мне совершенно страшно представить деривацию для String :: Int
Точнее не страшно, но это было бы значительно сложнее

Т.е. вместо тривиального nil шага был бы двух параметрический lastPair шаг, повторяющий логикую cons

Ну можно для практики поделать инстансы для HList ов и для последовательностей тьюплов

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

Представим ты хочешь сделать вот такой тип Int :: ( String :: Boolean :: HNil) :: HNil

как бы он выглядел в твоей логике?

Чтобы он принципиально отличался от Int :: String :: Boolean :: HNil

Mikhail
14.07.2017
13:08:05
список, один из элементов которого - пустой список
вот смотри. String :: Int :: HNil = 2, а String :: Int :: HNil :: HNil = 3. Если хнил такой самостоятельный и учитывается во втором случае, то почему в первом сайз не 3 ? )

Google
Mikhail
14.07.2017
13:08:36
меня кстати тоже это с толку сбило первый раз.
оно не сбивает столку, просто является следствием реализации и несовершенности)

Mikhail
14.07.2017
13:11:21
https://scastie.scala-lang.org/Odomontois/alRdyjwCSVWVuV38bke2bg/1
зачем ты это скидываешь? я знаю как оно устроено)

Oleg
14.07.2017
13:12:17
зачем ты это скидываешь? я знаю как оно устроено)
Ну т.е. ты можешь свои претензии предъявить не Сабину, а тому, кто придумал связный список в принципе

даже в лиспе (len (cons "string" (cons "int" (cons nil nil)))) == 3

Oleg
14.07.2017
13:15:47
какое-то умозаключение взятое с потолка)
Ещё раз. Ты предложил иное кодирование списков. С моей точки зрения оно вносит гораздо больше сложностей. Это кодирование списков основано на исторически используемой, знакомой всем системе кодирования право-ориентированного односвязного списка. Если есть способ лучше - было бы здорово

Потому что Int :: String :: Boolean технически не отличается от (Int, (String, Boolean)) просто другой конструктор типа. А без nil здесь возникает много вопросов о выяснении структуры вложенности

Admin
ERROR: S client not available

Oleg
14.07.2017
13:18:39
я и не предлагал. если я вдруг предложу - это будет в более целостном и законченном виде с учетом всех нужных нюансов)
Ну ты можешь попрактиковаться. Тебе нужно придумать такую систему, в которой можно было бы просто записать [Int, String, Boolean] [[Int, String], Boolean] и [Int, [String, Boolean]], так чтобы они стали тремя разными типами

в текущей версии это возможно

Тюплами, как предложил @gurinderu тоже возможно, хотя требует промежуточных преобразований для индукции

Nick
14.07.2017
13:32:14
можно тьюплами как предложил чувак в видео

Oleg
14.07.2017
13:33:05
можно тьюплами как предложил чувак в видео
если двойными тюплами, напиши плиз представление для [Int, String, Boolean] [[Int, String], Boolean] и [Int, [String, Boolean]] так, чтобы это было три разных типа

Nick
14.07.2017
23:22:03
@optician_owl тебе не кажется, что этот чувак из раст чата какой-то даун?

Alexander
15.07.2017
07:37:31
выше писали, что java.time ничего, но блин, там же эксепшны летят в рантайме из тыщи мест

больше похоже на java.util.Calendar 21 века ))

Google
Юрий
15.07.2017
07:40:21
java.time в целом норм. Так хотя бы всё иммутабельное

Alexander
15.07.2017
07:41:43
это да, но эксепшны

Юрий
15.07.2017
07:42:55
сделай свой puretime с Either вместо эксепшенов. Как pureconfig вокруг typesafe config.

Daniel
15.07.2017
07:42:59
там и со временем не все гладко, была пара подробных постов на хабре

Alexander
15.07.2017
07:43:24
если бы это было Scala API, зас...ли бы, ну а так, терпимо

Юрий
15.07.2017
07:43:51
зас...ли?

засосали?

засудили?

засолили?

Daniel
15.07.2017
07:45:22
засмущали

Needle
15.07.2017
07:45:48
заскребли

засунули

Alexander
15.07.2017
07:46:18
иностранцу не понять

Nick
15.07.2017
07:52:50
это да, но эксепшны
А где кроме Парсинга они летят?

Alexander
15.07.2017
07:53:04
Форматирование

Nick
15.07.2017
07:53:34
Хм, а ты свои формат пишешь? Там ж есть все нужные определённые заранее

Alexander
15.07.2017
07:55:46
Они и падают, если у тебя какой нить инстант, а в нем чего-то нет для форматера.

Nick
15.07.2017
08:11:28
ну да, к примеру когда хочешь зону взять из instant)

есть такое да)

Daniel
15.07.2017
08:15:02
@optician_owl тебе не кажется, что этот чувак из раст чата какой-то даун?
да вы оба наркоманы 1000 постов за ночь про многопоточность в го

Nick
15.07.2017
08:18:28
да не, не про го там речь

KrivdaTheTriewe
15.07.2017
11:04:50
сын монады

Страница 823 из 1499