@haskellru

Страница 1367 из 1551
Index
25.07.2018
09:11:30
сделать, перегрузкой по типам

A64m
25.07.2018
09:11:35
как и вообще дататайп-дженериков

это не рекорды

весь смысл рекордов в перегрузке "по строчкам"

Google
Index
25.07.2018
09:12:43
чем data Rec = MyRec { a :: Int, b :: Int } хуже, чем newtype A = A Int newtype B = B Int type Rec = { A, B }

или label A label B type Rec = { A :: Int, B :: Int }

A64m
25.07.2018
09:13:42
тем что требует деклараций

нормальный рекорд вообще не должен никаких деклараций требовать

Index
25.07.2018
09:14:31
ну так в этом и смысл, что декларация определяет сущность, а не выбор имени, который должен быть нерелевантным вообще, потому что имена это мета

альфа-эквивалентность и всё такое

A64m
25.07.2018
09:16:20
да понятно в чем смысл, для рекордов это неудобно

Index
25.07.2018
09:18:11
когда начинают имена и сущности путать, у меня от этого так горит, это такая бессовестная подмена понятий



я не знаю как можно с серьезным лицом это толкать

формализовывать

и т.д.

так же как математики, которые помешаются там на какой-то конкретной системе счисления и начинают доказывать свойства про "суммы цифр" и т.д., как будто цифры это что-то релевантное, а не способ записи

Google
Pineapple
25.07.2018
09:19:58
Всякая нотация, чтобы ей было удобно пользоваться должна быть компактной. Если для каждого поля в структуре генерить newtype — это будет километры бойлерплейта

data V3 a = V3 { x :: a, y :: a, z :: a } ?

Index
25.07.2018
09:20:48
меня не волнует нотация пусть будут всякие DuplicateRecordFields например, и т.д. меня начинает беспокоить, когда нотация из синтаксиса переползает в семантику, то есть начинает абстракция по этим штукам

Pineapple
25.07.2018
09:20:55
Три ньютайпа разводить?

Index
25.07.2018
09:21:20
конечно

Index
25.07.2018
09:21:53
я имею в виду, что пусть нотация будет с любыми уродствами

и путаньем сущности и имени

всё ради компактности

а вот теоретическая чистота самих сущностей, описываемых нотацией, для меня важна

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

A64m
25.07.2018
09:22:47
Всякая нотация, чтобы ей было удобно пользоваться должна быть компактной. Если для каждого поля в структуре генерить newtype — это будет километры бойлерплейта
напоминаю, что вы говорите бойлерплейт "как будто это что-то плохое" человеку, который продвигал data Foo where type Bar :: Foo type Baz :: Foo type Quux :: Foo

Index
25.07.2018
09:24:27
ну я начал писать на Haskell не из-за компактности, с любой вербозностью жить можно, если семантика правильная

то есть понятно, что не с любой, но не то чтобы если в Haskell синтаксис стал а-ля Java, то для меня бы это стало катастрофой (не стало бы)

Kaidax
25.07.2018
09:25:28
зачем презентация по недо-katip в этом чятике?
katip не умеет извлекать структуры автоматически из стринг интерполяций ...

A64m
25.07.2018
09:26:52
то есть понятно, что не с любой, но не то чтобы если в Haskell синтаксис стал а-ля Java, то для меня бы это стало катастрофой (не стало бы)
обратите внимание, что человек с такими взглядами сейчас очень активен в обсуждении ряда пропозалов теперь представьте себе хаскель будущего

т.е. я считаю позицию @int_index пр ряду вопросов правильной и полезной, но не по тому что можно увидеть глазами все предложения по тому, что можно увидеть глазами - заставляют мои глаза кровоточить

Leonid
25.07.2018
09:29:52
@int_index против хаскеля в продакшоне, так и запишем

Alexander
25.07.2018
09:30:35
katip не умеет извлекать структуры автоматически из стринг интерполяций ...
ну это ж не очень интересно? хотя может местами и полезно

Kaidax
25.07.2018
09:32:05
ну это ж не очень интересно? хотя может местами и полезно
Почему не интересно? Большой минус к бойлерплейту

Google
Kaidax
25.07.2018
09:32:15
Меньше бойлерплейта - больше пишут логов

Alexander
25.07.2018
09:32:42
зачастую в структурированных логах (для меня) интересен стек атрибутов

т.к. в сообщении об ошибке зачастую не появляются аргументы, которые прицепили к нашему стеку ранее, и которые потом должны появиться в логе

Kaidax
25.07.2018
09:33:39
Контекст тоже тащится если ты об этом

Alexander
25.07.2018
09:34:00
это добавление одного TH метода.

к существующему решению, который часть surface синтаксиса

а самое интересное со структурированными логами в другом (имхо)

причем TH или аналога, чтобы не было runtime cost

Kaidax
25.07.2018
09:36:40
Но тут еще большой вопрос, должно ли это делаться не на тайпклассовых контекстах, потому что с человеческим reflection вроде можно и сделать
С reflection приходится всегда либо таскать прокси, либо ScopedTypeVariables+TypeApplications. У имплицитов есть киллер фича - в скоупе может быть только один имлпицит с одним именнем, то есть их можно использовать для тайп инференса

Index
25.07.2018
09:39:24
в рефлекшене тоже есть функциональная зависимость, что если Reifies s a, то s -> a, так что тайп инференс там не страдает а вот Proxy да, плохо, и еще без first-class existentials местами плохо

но выдиранием прокси занимаются as we speak

Index
25.07.2018
09:40:32
несколько пропозалов в этом направлении, пейпер недавно еще

Alexander
25.07.2018
09:40:46
я на самом деле плохо вижу почему там нужен type inference при написании логов, и так же (я не вижу почему из TH у нас не будет доступа к информации о переменной, т.к. она объявлена в другом блоке)

Kaidax
25.07.2018
09:40:56
Например эмулировать ооп синтаксис: mkObj :: (Object a) => a -> (forall a'. (?curObj :: a', Object a') => r) -> r mkObj a f = let ?curObj = a in f class Object a where get :: (?curObj :: a) => IO Int x = do let obj = mkObj a <- obj get b <- obj get pure (a + b)

Alexander
25.07.2018
09:41:02
но может я неправильно помню про ТН, не часто этой фичпй пользуюсь

Kaidax
25.07.2018
09:41:52
Index
25.07.2018
09:44:17
Да. А как ты еще будешь @s определять, если у тебя ее ни в типе нет, ни явно?

Kaidax
25.07.2018
09:47:54
Очевидно. Просто я говорю о том что имплициты подаются по имени, поэтому вместо того чтобы подать @s чтобы прорезолвить оверлоад, можно наоборот выхватывать тип из имлпицита и делать оверлоад только по нему. То есть делать полностью контекстно-зависимые DSL'ки.

Index
25.07.2018
09:49:12
так s соответствует имени, а не типу

Google
Index
25.07.2018
09:49:31
то есть ?curObj :: a это что-то вроде Reifies "curObj" a

s надо протаскивать вручную или выводить, потому что она локальная, а "curObj" это не переменная, а просто строчка тут две проблемы. первое в том, что это строчка, про это я уже жаловался и сегодня больше не хочу, допустим мы заменим это на data CurObj и Reifies CurObj получается что-то вроде Given-style reflection уже, то есть протаскивать s не нужно, но есть угроза когерентности

Kaidax
25.07.2018
09:51:15
Да, но я могу написать obj get, а не obj (\(p :: Proxy s) -> get @s) where get :: forall s a. (Reifies s a, Object a) => IO Int; get = reflect (Proxy @s) & get

Index
25.07.2018
09:53:10
для Given-style reflection мне хотелось бы хорошую историю увидеть, то есть понятно, что give True (give False (expr)) это нонсенс, но вот give True expr && give False expr это ок, то есть надо как-то формализовать locally coherent, чего я не видел для Хаскеля

Kaidax
25.07.2018
09:53:59
К тому же я могу оверлодать полностью, e.g.: class Object a r | a -> r where get :: (?curObj :: a) -> r data IntObj = IntObj data StringObj = StringObj instance Object IntObj (IO Int) instance Object StringObj (IO String) mkStringObj :: _; mkIntObj :: _; x = do a :: Int <- mkIntObj get b :: String <- mkStringObj get

Index
25.07.2018
09:55:51
я еще раз говорю, с implicit parameters две проблемы, — они основаны на строчках и они могут когерентность ломать про строчки — это можно исправить и ни один из примеров выше не сломается про когерентность — это присуще и Given-style reflection и обходится исключительно аккуратностью

имплиситные параметры можно выкинуть если решить проблему про когерентность, тогда любой адекватный пример смог бы переписать на reflection на сейчасшний момент не могу

то есть я верю, что имплиситные параметры можно хорошо применить, но мне от этого проще не становится

то есть ты пойди, возьми Refies, и убери там весь rank2 происходящий

просто в reify вынести forall s наверх

Admin
ERROR: S client not available

Kaidax
25.07.2018
09:59:16
Но ведь в этом не будет смысла?

Index
25.07.2018
09:59:26
в этом будут имплиситные параметры

Kaidax
25.07.2018
09:59:26
forall s создает синглтон

Index
25.07.2018
09:59:43
все примеры выше переписываются тогда на Reifies CurObj a вместо ?curObj :: a

потому что имплиситные параметры это и есть reflection, в котором s в refiy вытащили наверх

и приняли за него строчку

Kaidax
25.07.2018
10:00:39
Ну в целом да.

Это кстати хорошая идея так сделать, потому что тогда "строчку" можно вычислять через TypeFamily что мне сейчас понадобилось

Спасибо за идею!

Google
Index
25.07.2018
10:06:40
пожалуйста (я пять минут думал что сказать про вычисление строчек для имплицитных параметров посредством семей типов, но не придумал)

Index
25.07.2018
10:11:57
да я видел как real numbers определяют как последовательность десятичных цифр

а потом задают equivalence class на этом

чтобы 0.9999... и 1.0 приравнять

Ilya
25.07.2018
10:13:42
да я видел как real numbers определяют как последовательность десятичных цифр
Это устаревшая традиция, и на матфаках так не определяют

Index
25.07.2018
10:13:58
приятно слышать

Евгений
25.07.2018
10:18:45
Это никогда не существовавшая традиция. В фихтенгольце (50'ые годы) вещественные определяются как дедекиндовы сечения. В крайном случае их конструируют как сходящиеся в себе последовательности

Pineapple
25.07.2018
10:20:12
На физтехе, как помню дейтсвительные числа вводили именно через десятичные разложения. Но я нетвердо помню

Евгений
25.07.2018
10:20:31
В защиту выделенных систем счисления могу сказать, что p-адические числа напрямую от системы счисления зависят

На физтехе, как помню дейтсвительные числа вводили именно через десятичные разложения. Но я нетвердо помню
Ну инженерам-то конечно. Удивительно, что вообще как-то определяют, а не дают как данность

Ilya
25.07.2018
10:20:50
На физтехе, как помню дейтсвительные числа вводили именно через десятичные разложения. Но я нетвердо помню
Всё так, по-крайней мере Тер-Крикоров так делал. Но надо признать, что на физтехе не готовят математиков

A64m
25.07.2018
10:31:26
ну конечно, пара человек тут ответили, что TLC вроде нормальная фича, но пропозал не минусанули

Alexander
25.07.2018
10:32:18
у нас через пределы в школе вводили

Pineapple
25.07.2018
10:39:57
Хорошая школа

Евгений
25.07.2018
10:40:42
Ты в 239 учился?

Alexander
25.07.2018
10:40:59
в АГ

Евгений
25.07.2018
10:41:12
Норм, до исхода ЮМШ или после?

Alexander
25.07.2018
10:41:54
не знаю

Евгений
25.07.2018
10:42:17
А ты в каком закончил?

Alexander
25.07.2018
10:42:32
2003 вроде или 2004

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