
Vladimir
28.02.2017
09:11:34
:D

Dmitry
28.02.2017
09:12:50
1) призвать ктулху -> ??? ктулху

Anatolii
28.02.2017
09:13:18
изгонять?

Dmitry
28.02.2017
09:13:29
изгонять это когда способ удаления объектов появится

Google

Dmitry
28.02.2017
09:13:34
пока они никуда не деваются
еще есть cage
immure как-то слишком клаустрофобно. пусть будет confine

Misha
28.02.2017
09:20:49
fasten

Dmitry
28.02.2017
09:21:50
нелогично. если пристегиваешься - тебя не надо потом саммонить

Misha
28.02.2017
09:22:14
ну прямой антоним наверное expel
призвал - изгнал
но это удаление все-таки

Dmitry
28.02.2017
09:22:46
да

Alexander
28.02.2017
09:41:51
С generic можно
Но у меня в голове не сложилось правильное (ТМ) решение

? animufag ?
28.02.2017
10:09:53
repl.it - Introducing Haskell
https://repl.it/site/blog/haskell
Не знаю чем лучше аналогов

Google

Max
28.02.2017
10:10:20
@elemir90 ты чего с дивана ушёл?

? animufag ?
28.02.2017
10:10:26
Просто репостнул

Евгений
28.02.2017
10:10:37
Там тухло

Max
28.02.2017
10:10:47
потому что ты ушёл
у нас там про тр-кого

Евгений
28.02.2017
10:11:34
К тому же у меня много работы, не до срачиков

Dmitry
28.02.2017
11:08:05
@qnikst получается как-то слишком просто и тупо: https://gist.github.com/voidlizard/6425d53600bef89b7f59f2024e45c9c6
наверное, что-то тут не так.

Misha
28.02.2017
11:15:59
а чего тут может быть не так? ну разве что этот код не кладет чего-то там в кэш после вытаскивания из внешнего хранилища, ну так это отдельная большая песня

Dmitry
28.02.2017
11:16:29
какой-то он недостаточно абстрактный

Alexander
28.02.2017
11:17:02
сейчас подумаю, только приехал

Dmitry
28.02.2017
11:18:01
ну т.е понятно что тут не абстрагируется никак тип сторейджа, но с другой стороны непонятно как его абстрагировать и надо ли. специфика с двумя разными типами ключей - она тут уникальна

Alexander
28.02.2017
11:18:08
зачем summon в классе?

Dmitry
28.02.2017
11:18:53
ну потенциально может захотеться по другому объект доставать
или сделать какие-то вещи - например рекурсивно загрузить весь стаф, который там внутри

Alexander
28.02.2017
11:19:03
ок

Dmitry
28.02.2017
11:19:12
где-то это надо, где-то не надо

Alexander
28.02.2017
11:19:20
тогда логично
тип стоража я бы не стал абстрагировать, а то там треш и угар сразу будут

Dmitry
28.02.2017
11:19:51
да

Google

Dmitry
28.02.2017
11:20:15
MonadIO мне тут кстати нравится - на практике то будет внутри серванта зваться, меньше мусора в коде
а еще мне кажется ,что при помощи uniplate и type families можно при желании сделать удобный ORM где вся метаинформация будет в инстансах, а сами типы не будут ей загаживаться.
правда каждый атрибут придется завернуть в newtype но - для работы с uniplate это норма
и по моему это лучше, чем то, как это решается в persistent

Alexander
28.02.2017
12:00:40
persistent ужасен
мне понравился мой подход с функтором, надо будет поиграться с ним

Vladimir
28.02.2017
12:17:52

Alexander
28.02.2017
12:17:59
ничего
ну в смысле ничего и raw access на мой взгляд лучше чем persistence
но я мало кода с обычными базами пишу

Vladimir
28.02.2017
12:18:27
то есть на более низком уровне работать и воротить свои абстракции?

Alexander
28.02.2017
12:18:33
да
в персистенте они протекают чуть-ли ни при чем-то более сложном чем select * from base where id=?

Vladimir
28.02.2017
12:34:02
да и ORM все протекают тоже

Alexander
28.02.2017
12:34:35
у меня ещё с питонопхп с ORM были проблемы
т.е. оно переставало работать
единственное, что было толковое это явовский doa dia dao, что-то такое, но это не ORM а edsl над sql, так что не в счет

Anatolii
28.02.2017
12:46:57
джависты своим хибернейтом козыряют

Alexander
28.02.2017
12:48:56
он какой-то упоротый
имхо

Google

Misha
28.02.2017
12:50:14
never again
там не то, что протекает, там заборы-коровники-мама-мы-в-аду-мама. Потратить день на тривиальный фикс, который можно было бы сделать простым джоином --- нефиг делать.

Anatolii
28.02.2017
12:52:15
ну я такого же мнения, не очень понимаю зачем учтиь хибернейт если можно учить SQL

Vladimir
28.02.2017
12:53:02
вот да, всегда от таких инструментов ожидается просто гибкий и безопасный способ строить запросы, т.е. dsl, а тебе дают какую-то игрушку для примитивного CRUD.
и еще говорят тебе мол это же ПАТТЕРН, так надо. а если не получается что-то, то сам дурак

Alexander
28.02.2017
12:54:13
ну я ещё как-то понимаю идею, за ORM, но она ломается
обычно не охота брать целый объект, а как тащишь не целый, то начинаются пляски
ну и все join-ы начинают работать через зад
@anpryl я тебе proof of concept собирания результата mysql писал?
если да, то работает ли все ещё?

Anatolii
28.02.2017
12:55:58
@qnikst да, я его под свою либу подправил
но то был мой домашний проектик, так что на проде не работает:)

Dmitry
28.02.2017
12:56:18
С sql проблема не в нём, а в том куда бизнес логику девать
Если она в хаскелле, то БД не нужна
А если в БД то хаскелл не нужен

Alexey
28.02.2017
12:58:55
unsummon/exile

Misha
28.02.2017
13:00:19

Dmitry
28.02.2017
13:01:25
Ну я пока склоняюсь что рсубд не нужна, хотя конечно от задачи зависит

Misha
28.02.2017
13:04:58
в этом месте средний программист наджави давится кофейком, конечно

Google

Misha
28.02.2017
13:05:53
но вообще да, понятно, что полно задач, где рсубд не нужна, но ее туда пихают потому что привыкли

Евгений
28.02.2017
13:06:37
define "не нужна". РСУБД это огромное количество оптимизаций для хранения данных, удовлетворяющих определённым условиям

Misha
28.02.2017
13:08:52
"не нужна" --- реляционная модель не очень подходит для представления данных
но на практике чаще бывает так, что оверхэд от ее использования превышает бенефиты (транзакции, гибкий язык запросов, вот это все)
потому что натянуть на реляционную модель можно почти что угодно, а вот получится ли в итоге удобно и быстро --- не факт

Dmitry
28.02.2017
13:26:00
Да как то удобно вообще ни разу не получалось

Misha
28.02.2017
13:53:50
ну такие задачи наверное

Aldar
28.02.2017
16:46:49
newtype Maybe' a = Maybe' { getMaybe :: Maybe a }
deriving (Eq,Show)
instance Monoid a => Monoid (Maybe' a) where
mempty = Maybe' (Just mempty)
mempty справа же у меня верно определится как мемпти типа a?
или правильнее
mempty = Maybe' (mempty)?

Misha
28.02.2017
16:52:26
наверное имелось в виду mempty = Maybe' . mempty ?
потому что иначе тайпчекер возмутится

? animufag ?
28.02.2017
16:54:08
mempty :: a

Aldar
28.02.2017
16:54:28
mempty = Maybe' (mempty :: a)?

? animufag ?
28.02.2017
16:54:51
mempty = Maybe' (Just mempty)
ок ведь

Misha
28.02.2017
16:54:59
mempty = Maybe' (mempty :: Maybe a) тогда уж

Aldar
28.02.2017
16:55:35
но мемпти определен для типа а
а не для Maybe a
хотя если он определен для a, то и для Maybe a тоже определен

Misha
28.02.2017
16:56:42
а
ну да

Aldar
28.02.2017
17:01:36
instance Monoid a => Monoid (Maybe' a) where
mempty = Maybe' (mempty)
mappend (Maybe' (mempty)) m = m
mappend m (Maybe' (mempty)) = m
(Maybe' m1) mappend (Maybe' m2) = Maybe' (mappend m1 m2)
Паттерн матчинг норм для маппенда с Maybe' (mempty)?