@haskellru

Страница 216 из 1551
Dmitry
28.02.2017
06:36:57
@qnikst вы ж стафф храните в KV ?

Alexander
28.02.2017
06:40:44
Да

Dmitry
28.02.2017
06:41:04
и что если надо ссылаться?

Alexander
28.02.2017
06:41:30
Но у нас туда граф кладется и как-то тупо, т.е. то, что это KV не видно

Google
Dmitry
28.02.2017
06:41:51
т.е одним чанком кладется, одним поднимается?

Alexander
28.02.2017
06:41:57
Примерно

Там диффы стейта кладутся

И снапшоты

В другом месте (другой проект) тоже тупо, но там можно лучше

Там по типу ключа можно понять тип значения и то reference это или значение, может ли их много храниться и т.п.

Dmitry
28.02.2017
06:43:28
да у меня тоже всё тупо, но я заметил, что апдейт большого чанка и его запись как-то много времени занимают, и попилил на куски

а куски должны друг на друга ссылаться

Alexander
28.02.2017
06:43:39
Соотв все ключи можно представить GADT-тос

*том

Dmitry
28.02.2017
06:44:02
о. типизированные ключи

а нету ли какой-то иллюстрации?

как это правильно делается?

Google
Alexander
28.02.2017
06:45:17
Нету, я еще не запилил, но скоро набросать смогу, мне щас надо ехать отца из больницы в больницу везти

Dmitry
28.02.2017
06:48:40
не могу понять, где устроить специальную олимпиаду по этому вопросу

Alexander
28.02.2017
06:49:33
data Key * where Key1 :: .. -> Key 'Reference (Key Foo) Key2 :: .. -> Key 'Value Foo

Везде :)

На гист положить можно, и рассказать тут и в гиттере, дальше разнесут

Dmitry
28.02.2017
06:50:18
в гиттере народ что-то недружелюбный, а здесь его мало :)

Alexander
28.02.2017
06:50:22
То что выше если по ключу известно значение там или референс

Dmitry
28.02.2017
06:50:27
а на стековерфлоу наверное вопросы дизайна нельзя

но даже если и можно там никто ничего не понимает

Alexander
28.02.2017
06:51:22
На реддит?

Dmitry
28.02.2017
06:51:41
а там вообще можно вопросы задавать? или только набросы и статьи

Alexander
28.02.2017
06:52:03
Кто-то задает периодически, я его почти не читаю

Dmitry
28.02.2017
06:53:36
в целом-то да, мне кажется что надо типизировать ключи. суть в том, что в CAS хранилище есть два типа объектов - непосредственно объекты , ключом которых является хэш их бинарного представления, и индексируемые объекты - т.е хранимый объект может поменяться, но индекс будет неизменен. Т.е довольно просто сделать два вида ключей в домене и мапить их через тайп фемилис

но. получается, что домену теперь есть дело до того, где и как он хранится

Alexander
28.02.2017
06:57:00
Если есть возможность в гисте написать список того что и где лежать может, то можно решение вывести

Тип ключа наверное можно по типу значения вывести, т.е. как оно там хранится

Через TF

Тут большой вопрос может ли в базе лежать reference на неизвестный статично тип

Dmitry
28.02.2017
07:02:54
ну, я считаю что в тех местах, где подхватываю что-то из базы, тип мне известен

Alexander
28.02.2017
07:03:21
Тогда на GADT все должно красиво писаться

Google
Dmitry
28.02.2017
07:03:44
смущает меня собственно два вида ссылок (непосредственные и индексные) и то, что домен - который вроде как чистые данные - должен это как-то принимать во внимание

т.е смешение уровней абстракции неким образом.

пойду что ли наброшу в гиттере про другое. или рано еще

Alexander
28.02.2017
07:05:47
Есть еще вариант: сделать newtype Referenced

Dmitry
28.02.2017
07:05:56
а как это поможет?

Alexander
28.02.2017
07:06:02
И щас если с телефона не убьюсь писать:

class GetValue a where type Key a : * get :: Key a -> DB -> (Maybe a) default get :: Hashable a, Key a~ a) => a -> db -> Maybe a get x = getFromDb (hash x) Instance G Referenced a where KEY (Referenced a) = K a -- Int ...

Тогда для всех value типов просто пишешь instance G Foo where Key Foo = Foo

Но придется платить тем, что у тебя Referenced X будет в адт, что криво

Можно сделать значения как в виниле, в функтор запрятанные и передавать туда или Identity (полная загрузка объекта) или Maybe (загрузка с возможностью ошибки) или Referenced (неглубокая загрузка) или Either Referenced (смысл по желанию)

Т.е. Dbbvalue f = Foo (f Another Value) Bar

Но это на границе пушки и воробьев

Dmitry
28.02.2017
07:14:11
что-то да.

хочется сами типы иметь как можно более простыми, а метаинформацию держать где-то еще

Alexander
28.02.2017
07:18:12
Ну вон класс типов вышк

Подойдет?

Единственоое что в базу придется класть значение, которое referenced где ссылки, если это допустимо

Если не допустимо и тип всегда или value или referenced то есть еще варианты

Dmitry
28.02.2017
07:19:33
ну выглядит похоже на то, что мне нужно. все равно напрягает что домен, которум в принципе должно бытб пофиг, как он хранится, придется отличать value от reference

но если я это сам себе смогу обосновать, то да - можно сделать разные типы для разных ссылок и через тайпфемили мапить их на разные типы ключей в БД

Google
Alexander
28.02.2017
07:20:49
Можно и по другому но с бойлерплейтом

Dmitry
28.02.2017
07:21:59
там у тебя тип DB прибит, а еще надо понимать, что это наверное IO

и даже не IO, а MonadIO

и тайпкласс получается довольно развесистый...

Alexander
28.02.2017
07:22:58
Нафиг monadIO пользователь лифтнет куда надо

Dmitry
28.02.2017
07:23:20
т.е просто Monad ?

Alexander
28.02.2017
07:23:23
С дб, да не удобно

Ну то что база просит минимально

Dmitry
28.02.2017
07:23:42
IO ?

Alexander
28.02.2017
07:23:47
Наверное

Хм.. без IO тоже наверное можно

Класс может отдавать функции генерации ключа и сериализаторы

А вызывать его из другой функции которая уже в IO

Dmitry
28.02.2017
07:25:05
ну у меня сложнее, у меня ключ становится известен после сохранения объекта, так что нет.

для "непосредственного" объекта

Alexander
28.02.2017
07:26:25
А т.е. хэш средствами базы?

Ладно, наверное я всех требований подожду прежде чем угадывать интерфейс

Dmitry
28.02.2017
07:27:54
ну вопрос даже не в конкретном интерфейсе

а в том, как абстрагировать данные домена от того, как они хранятся

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

Google
Dmitry
28.02.2017
07:55:28
а ведь наверное еще можно через Data или Generic каким-то образом преобразовывать ADT к типу, когда все значения заменяются на ключи или наоборот

знатокам английского. если поднять объект из базы по ссылке - будет summon , то как будет упихать объект в базу?

всякие put/set load/save ???/store уже заняты и слишком скучно

Vladimir
28.02.2017
09:08:54
banish

:D

Vladimir
28.02.2017
09:09:06
всегда знал что кодинг на хаскеле - магия вот и сейчас объекты не забирают из базы, а призывают

Vladimir
28.02.2017
09:09:41
confine

?

Dmitry
28.02.2017
09:09:48
я так еще с перла пишу

уже тогда put/get load/save было плотно занято всеми

по многу раз

Vladimir
28.02.2017
09:10:21
О!

dismiss

хороший вариант

Dmitry
28.02.2017
09:10:45
надо решить confine или dismiss - и то и то подходит, но смысл несколько отличается

Vladimir
28.02.2017
09:10:47
обожаю такие вещи

ЖВ

Dmitry
28.02.2017
09:10:49
confine вообще нормально по моему

по крайней мере логично.

Anatolii
28.02.2017
09:10:56
banish?

Dmitry
28.02.2017
09:11:05
blobster - тюрьма объектов, чо уж.

Vladimir
28.02.2017
09:11:21
да, dismiss - это типа в пустоту отправить, а confine - в какое-то конкретное место

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