
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
в скалке хз что

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))))
В скалке можно если не так, ну хотя бы пару методов сделать у тюплов
пару тайпмемберов

Google

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

Oleg
14.07.2017
12:44:34

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

Oleg
14.07.2017
12:50:55
https://scastie.scala-lang.org/Odomontois/U4NchnQxSfK5l7KaIrsU8A/1
это и просто в скале так

Mikhail
14.07.2017
12:57:29

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 :)

?Ivan
14.07.2017
13:00:18

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

Oleg
14.07.2017
13:03:00

Alexey
14.07.2017
13:03:50

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
Т.е. вместо тривиального nil шага был бы двух параметрический lastPair шаг, повторяющий логикую cons
Ну можно для практики поделать инстансы для HList ов и для последовательностей тьюплов
А что самое главное, в такой логике было бы гораздо сложнее отличить вложенный список, от продолжения списка
Представим ты хочешь сделать вот такой тип
Int :: ( String :: Boolean :: HNil) :: HNil
как бы он выглядел в твоей логике?
Чтобы он принципиально отличался от
Int :: String :: Boolean :: HNil

Mikhail
14.07.2017
13:08:05

Google

Mikhail
14.07.2017
13:08:36

Oleg
14.07.2017
13:10:49

Mikhail
14.07.2017
13:11:21

Oleg
14.07.2017
13:12:17
даже в лиспе
(len (cons "string" (cons "int" (cons nil nil)))) == 3

Mikhail
14.07.2017
13:13:45

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

Admin
ERROR: S client not available

Mikhail
14.07.2017
13:17:25

Oleg
14.07.2017
13:18:39
в текущей версии это возможно
Тюплами, как предложил @gurinderu тоже возможно, хотя требует промежуточных преобразований для индукции

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

Oleg
14.07.2017
13:33:05

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

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

Aleksey
15.07.2017
09:33:41

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