
Alister
17.07.2018
14:08:59

shadowjack
17.07.2018
14:09:40
Ещё критерий надобности нужен

A64m
17.07.2018
14:09:44
критерий академичности известен - "академик" пишет статьи которые публикуются в реферируемых журналах

Александр
17.07.2018
14:09:55

Google

A64m
17.07.2018
14:10:36
программисты под "практический" подразумевают не это обычно

Александр
17.07.2018
14:11:07
Если открыть Архив.Орг по направлению CS, то там полно такого, о чем даже не подумаешь, что можно написать статью в реферируемый журнал.
Уверен, у большинства из нас найдется таких проектов пачка, но почему-то мы не оформляемся как ученые.
(Ну, не все)

A64m
17.07.2018
14:15:28
не понятно все еще с какими "академиками" вы собрались воевать

Ilya
17.07.2018
14:15:43

A64m
17.07.2018
14:16:47
у де гуза-то хоть понятно, он "академиками" назвал своих противников оопешников, просто потому что у программистов "академик" это что-то вроде "фошист", т.е. какой-то нехороший человек

Александр
17.07.2018
14:19:19
Не претендую на знаменосца в этой войне, а лишь моделирую ситуацию и обозначаю конфликт (который и так очевиден)

A64m
17.07.2018
14:19:34
мне не очевиден
(такой конфликт, по крайней мере)
или речь опять про конфликт снойманитов с кабалистами?

Александр
17.07.2018
14:20:26
Может быть

A64m
17.07.2018
14:22:24
так если всех кабалистов извести - снойманиты не смогут их часть работы выполнять

Google

Gleb
17.07.2018
14:27:09
Я тут вброшу немножко (http://www.aosabook.org/en/posa/warp-images/benchmark.png). В чем дело, собстно?
У них же модель работы с соединениями похожая
И вообще с I/O

Aleksey
17.07.2018
14:34:37
Майти, это warp, кстати. Про warp была давнишняя статья, в которой описывалось, почему оно быстро работает

Gleb
17.07.2018
15:15:09
?

Index
17.07.2018
16:52:08
Это ко мне предъява сейчас была?
Пойдем выйдем поговорим

A64m
17.07.2018
16:57:52
после того как @int_index топил за
data Foo where
type Foo
type Bar
type Baz
может пожертвовать им не такая и плохая идея

Index
17.07.2018
16:59:30
ну начнем с того, что то, что ты написал, не может работать
я топил за data Foo = type Bar | type Baz | type Quux
либо
data Foo where
type Bar :: Foo
type Baz :: Foo
type Quux :: Foo

A64m
17.07.2018
17:00:13
да

Index
17.07.2018
17:00:18
а type Foo :: Foo работать не может
потому что это один неймспейс

A64m
17.07.2018
17:00:28
но такого уровня повторения я бы уже не вынес

Index
17.07.2018
17:00:49
Так писал бы дальше
data Foo where
Bar :: Foo
Baz :: Foo
Quux :: Foo
ты еще не видел наверное где я топил за type [] Int вместо [Int], чтобы не было конфликта с '[Int] (который надо писать как [Int])
мне даже Эйзенберг сказал куда идти лечиться, но я своего мнения не поменял

A64m
17.07.2018
17:03:02
это дискуссионно по крайней мере, совсем не тот уровень ужаса

Google

Index
17.07.2018
17:03:43
это вообще-то одно и то же, явная квалификация неймспейса и там, и там

A64m
17.07.2018
17:05:38
data type или type data было бы одно и то же, бессмысленное повторение ключевого слова n раз там где все равно нету возможности выбирать неймспейс для каждого конструктора, а только для всех разом - вот в чем проблема

Index
17.07.2018
17:07:11
я был за выбор неймспейса для каждого конструктора

A64m
17.07.2018
17:08:56
т.е. Foo промоутится, Bar - нет, а Baz промоутится? в чем смысл этого-то?

Index
17.07.2018
17:10:40
да смысла вообще в двух неймспейсах нет, а если уж их два, то не понимаю, почему не дать fine-grained control

A64m
17.07.2018
17:11:52
потому что ничем кроме бессмысленного повторения одного слова n раз это все равно не закончится?

Oleg
17.07.2018
17:12:58

A64m
17.07.2018
17:15:15
не надо говорить во множественном числе, второго человека который такое хочет нет

Oleg
17.07.2018
17:15:40

Index
17.07.2018
17:17:05
я не знаю что там в Скале происходит, у них вместо тайпклассов имплиситы
дальше решил не изучать этот язык

A64m
17.07.2018
17:17:51
там при объявлении "АлгТД" ключевое слово повторяется бессмысленно n раз

Oleg
17.07.2018
17:17:55
final case class
final case class
но уже есть игрушечная скала, где не так

A64m
17.07.2018
17:20:30
уже придумал как улучшить пропозал
data Foo = promoted data constructor Bar | promoted data constructor Baz | promoted data constructor Quux

Index
17.07.2018
17:22:51
но я тут последние пару дней снова в коде GHC рыскаю, так что мне кажется лучше писать pm_d_con
так сразу понятнее о чем речь

Google

Oleg
17.07.2018
17:24:01

Aleksey
18.07.2018
07:25:58
Если я имею
data Tag = A | B | C
class Foo (tag :: Tag) where
f :: Bar
я ведь не могу просто так сделать что-то вроде
map (_ f) [A, B, C]
?
Или, скажем, написать такой кодек для Aeson, который позволит декодировать с учётом тега
map _ [ByteString] :: [Maybe Bar]?
Потому как 'A и 'B - разные типы?
Или можно суммой вида
data Taged
= TA (Proxy 'A)
| TB (Proxy 'B)
| TC (Proxy 'C)
выкрутиться?

Yuriy
18.07.2018
08:01:26

Aleksey
18.07.2018
08:01:50
После промоута то разные "типы" же, не?

Yuriy
18.07.2018
08:02:16
ладно, выше уже обсудили

Admin
ERROR: S client not available

Yuriy
18.07.2018
08:02:21
вроде всё можешь
только просто так f не напишешь, потому что из Bar не выводится t :: Tag
можно f @tag

Index
18.07.2018
08:03:27
У тебя f :: forall (tag :: Tag). Foo tag => Bar, а для такого кода тебе надо f :: pi (tag :: Tag) -> Bar

Aleksey
18.07.2018
08:03:58
Вот интуитивно я как-то так и думаю

Index
18.07.2018
08:04:16
Ну pi-то нет без синглтонов

Aleksey
18.07.2018
08:04:35

Aleksey
18.07.2018
08:05:21

Yuriy
18.07.2018
08:05:59

Index
18.07.2018
08:06:00
Выкрутишься либо через
data WithFoo where
WithFoo :: Foo a => Proxy a -> WithFoo
map (_ f) [WithFoo (Proxy @A), WithFoo (Proxy @B), WithFoo (Proxy @C)]
либо через map (_ f) [toSing A, toSing B, toSing C] с синглтонами
могу подробнее расписать каждый из вариантов, если не очевидно

Google

Index
18.07.2018
08:06:49
но смысл в том, что без нормального pi надо лифтать, либо открытым стилем (через констрейнт), либо закрытым (через синглтоны)

Aleksey
18.07.2018
08:09:19
Вот и я про прокси подумал

Index
18.07.2018
08:10:11
Так там главное не Proxy, а словарик Foo внутри. Proxy можно будет убрать, когда экзистенциальные переменные биндить научимся
https://github.com/ghc-proposals/ghc-proposals/pull/126
После этого пропозала я бы так написал:
data WithFoo where
WithFoo :: Foo a => WithFoo
В общем-то надо понимать, что это roundabout способ сделать то же самое, что
[ f @A, f @B, f @C ]
только вместо конечного Bar там весь словарь лежит. Это имеет смысл только если какие-то другие методы в словаре есть
а вот синглтоны это уже плюс-минус честный способ хранить там именно значение типа Tag, по которому поматчиться можно
Хм, а наверное toSing и помэппить можно.
Тогда даже
map (_ f) [A, B, C]
прокатит как изначально прошено

Yuriy
18.07.2018
08:13:45
кстати, если я хочу data использовать только на уровне типов, можно сказать компилятору, чтобы он принимал их спокойно без тиков?

Index
18.07.2018
08:14:01
недавно приняли пропозал, с которым сможешь так сказать
type data Foo = Bar | Baz | Quux
оно сразу в тайплевельный неймспейс попадёт

Yuriy
18.07.2018
08:14:24

Index
18.07.2018
08:15:08
Да, что имени нет в скоупе

Yuriy
18.07.2018
08:15:24
отлично

Index
18.07.2018
08:16:11
@astynax как-то так думаю
f' :: Tag -> Bar
f' (toSing -> SomeSing (stag :: STag tag)) = case stag of
SA -> f @tag
SB -> f @tag
SC -> f @tag
матчинг можно TH-ом автоматизировать, см. sCases

Aleksey
18.07.2018
08:17:14
Хмм. Спасибо, поизучаю!

Index
18.07.2018
08:17:46
тогда будет что-то вроде
f' :: Tag -> Bar
f' (toSing -> SomeSing (stag :: STag tag)) = $(sCases ''Tag [| stag |] [| f @tag |])