@haskellru

Страница 1437 из 1551
Andrey
04.09.2018
19:47:50
есть, конечно, раз распознал как надо

Alexander
04.09.2018
19:48:23
ну ботов стало меньше, не знаю он или статистик помогли

Imants
04.09.2018
19:51:04
Он не самый хлебо-сольный. Неприветливый. Неочевидно, которую кнопку нужно жать. Стресс нагоняет, не?

Alexander
04.09.2018
19:54:03
ну давайте бота психолога ещё добавим

Google
Imants
04.09.2018
19:59:15
Да я переживу. За психологией лучше к людям. Что значит: "идём со мной", не понял. Но в голове моей опилки, так что ничего удивительного.

Alexander
04.09.2018
20:03:42
вообще вопрос не очевидный

"ты хочешь знать о Haskell" с ответами да/нет было бы проще

или да/да

и оба правильные

Imants
04.09.2018
20:06:22
А сейчас который ответ правильный? Или уже оба?

Alexander
04.09.2018
20:08:41
без понятия

мне очень не нравился подход в persistent где мы отдельно храним ключ и значение для типа

но с другой стороны это позволяет переиспользовать код для insert, когда id-шника ещё нет

а есть, какие-нибудь другие адекватные подходы позволяющие code reuse, и не хранить data KeyValue или аналогичный тип

и желательно не как в opaleye с Foo a b где для Id я поидее могу подставить ()

и как бы сделать композабельным hasql

Terminator
04.09.2018
21:24:52
Wrong Number будет жить. Поприветствуем!

Google
Dmitry
04.09.2018
21:55:58
а есть, какие-нибудь другие адекватные подходы позволяющие code reuse, и не хранить data KeyValue или аналогичный тип
другие, конечно, есть. Адекватные ли - вопрос неясный. Если интересно, можно мои труды посмотреть github.com/odr/db-schema.

Alexander
04.09.2018
22:00:28
а в кратце сделано, я не уверен, что я готов эту либу тащить прямо сейчас

ну или хотя бы куда стоит начинать смотреть

Dmitry
04.09.2018
22:07:51
я бы предложил начать с app - там какой-то пример

работает только с sqlite, pg не приделывал

делаешь простые рекорды, описывающие таблицы. К ним добавляется TL инфо о pk, fk, uk. Прогоняется через TH. Получаются классы с информацией о схеме БД на уровне типов, и на уровне значений.

Можно сгенерировать БД, как в persistent (без modify). Можно делать DML. Можно сделать другие рекорды - проекции и через них работать. Можно в проекции добавить списки дочерних рекордов и DML их сразу целиком. Ключи будут на лету генерироваться

в общем, с app, мне кажется, можно разобраться. Главное достижение, что оно компилируется вроде приемлемо по времени

Alexander
04.09.2018
23:12:11
обидно coerce не находит само путь между нужными типами без подсказок

Dmitry
05.09.2018
04:41:08
Yuriy
05.09.2018
05:22:01
мне очень не нравился подход в persistent где мы отдельно храним ключ и значение для типа
нет, там не обязательно хранить отдельно, можно только сказать персисту, какое поле у тебя первичный ключ

Alexander
05.09.2018
06:03:03
Какой именно патч?
https://github.com/bos/pool/pull/21

Alexander
05.09.2018
09:05:41
нет

Andrei
05.09.2018
09:06:43
https://hackage.haskell.org/package/beam

я не гарантирую, что это именно то, что нужно, но а вдруг

Alexander
05.09.2018
09:10:40
я кстати знаю скорее всгео что я хочу

но я это ещё не написал

Alexander
05.09.2018
09:50:55
Кстати, а сахарок в хаскеле будет для экзистенциальных типов когда-нибудь? Или может он в каких расширениях есть? Что бы как в русте impl Trait

alexknvl
05.09.2018
10:04:50
мой вариант: {-# LANGUAGE ExistentialQuantification, ConstraintKinds, KindSignatures #-} module Main where import GHC.Exts (Constraint) data Instance (c :: * -> Constraint) = forall a. c a => Instance a a :: Instance Eq a = Instance 1

Google
Artyom
05.09.2018
10:09:35
ещё это обычно называется Some или Exists (их несколько живёт на Hackage) https://hackage.haskell.org/package/exists-0.2/docs/Data-Exists.html

Yuriy
05.09.2018
10:15:04
может, какой-то другой сахарок нужен?

A64m
05.09.2018
10:18:36
class Show a => Foo a where baz :: a -> a data Bar = Bar Int instance Foo Bar where baz x = Bar $ x * 2 bar :: instance Foo bar = Bar 1 barS :: String barS = show $ baz bar

alexknvl
05.09.2018
10:18:57
data Instance (c :: * -> Constraint) = forall a. c a => Instance a instance Show (Instance Show) where show (Instance a) = show a a :: Instance Show a = Instance 1 main :: IO () main = putStrLn $ show a

A64m
05.09.2018
10:19:14
ну да

alexknvl
05.09.2018
10:19:18
а, хочется все инстанцы захватить?

это конечно никак

пытаюсь придумать, как написать instance c (Instance c)

видимо никак

A64m
05.09.2018
10:22:51
почему никак? type FooBar a = (Show a, Typeable a) ... Instance FooBar ...

Yuriy
05.09.2018
10:23:18
ну, в других языках тоже есть разыменование ссылки, не так уж это плохо

A64m
05.09.2018
10:24:55
> :set -XConstraintKinds -XGADTs -XFlexibleInstances -XUndecidableInstances -- храним неизвестный тип a с известным интерфейсом c > data Box c where Box :: c a => a -> Box c -- если известный интерфейс Show - можем печатать боксы > instance Show (Box Show) where show (Box x) = show x > [ Box 42, Box "foobar", Box 2.5 ] :: [Box Show] [42,"foobar",2.5] -- если известный интерфейс - rtti - можем извлекать из боксов значения нужного нам типа: > let boxes = [ Box 42.0, Box "foobar", Box 2.5 ] :: [Box Typeable] > mapMaybe (\(Box x) -> cast x) boxes :: [Double] [42.0,2.5] > mapMaybe (\(Box x) -> cast x) boxes :: [String] ["foobar"] -- составной интерфейс > type FooBar a = (Show a, Typeable a) > let boxes = [ Box 42, Box "foobar", Box 2.5 ] :: [Box FooBar] > map (\(Box x) -> (show x, cast x :: Maybe String)) boxes [("42",Nothing),("\"foobar\"",Just "foobar"),("2.5",Nothing)]

alexknvl
05.09.2018
10:25:30
почему никак? type FooBar a = (Show a, Typeable a) ... Instance FooBar ...
да, глупость сказал. наверно ещё можно как-то через [* -> Constraint]

а можно instance c (Box c) написать? может deriving via как-то в помощь?

Terminator
05.09.2018
10:27:23
@playfox будет жить. Поприветствуем!

A64m
05.09.2018
10:36:00
^^ @nexmean

а можно instance c (Box c) написать? может deriving via как-то в помощь?
нет, нельзя. с deriving via все равно надо будет инстанс декларировать для каждого класса по отдельности, хоть и тривиально, через дерайвинг

Terminator
05.09.2018
10:40:33
@dendi239 будет жить. Поприветствуем!

Alexey Bondarchuk будет жить. Поприветствуем!

@Dr_crutch будет жить. Поприветствуем!

Google
Dmitry
05.09.2018
11:06:34
Этак мы сегодня планку в 860 преодолеем

Yuriy
05.09.2018
11:13:27
Dmitry
05.09.2018
11:14:03
Лучше бы 1024

Alexander
05.09.2018
13:48:04
> yes - as for the implementation of the linear types extension, we're aiming for the submission of a Diff before the 8.8 branch is cut. (If the Committee has given the green light by then, of course.)

A64m
05.09.2018
13:54:53
такое и про 8.6 говорили

Alexander
05.09.2018
13:55:43
тогда не готово было сильно

A64m
05.09.2018
13:55:44
но сейчас, конечно, уже не так смешно

да если бы и готово было, эйзенберг только читать пропозал начал где-то дней через 10 после заморозки фич 8.6

Alexander
05.09.2018
13:57:47
угу

kana
05.09.2018
13:58:09
а можно instance c (Box c) написать? может deriving via как-то в помощь?
А какой у c тип? Type -> Constraint? Это же не обязательно класс

Alexander
05.09.2018
13:58:10
ghc-dev

A64m
05.09.2018
13:59:49
а вижу, ответили на августовский вопрос, что там у кого готово из фич

Alexander
05.09.2018
14:00:04
да, там кто-то спросил что с линейными типами

A64m
05.09.2018
14:00:49
вроде это он интересуется когда сделают

а @kana_sama вроде интересовался или-паттернами, если это так лучше бы растревожить (хайлайтнуть) кого-нибудь из обсуждавших пропозал в https://github.com/ghc-proposals/ghc-proposals/pull/43 вроде спж или читателя пропозала mchakravarty а то вроде все уже согласились все принять, но опять, судя по всему, просто забыли

Alexander
05.09.2018
14:18:27
@nexmean
Спасибо, жаль точного расписания выхода нет.

A64m
05.09.2018
14:19:13
наиболее точное в настоящий момент расписание будет * никогда (но это не точно)

Alexander
05.09.2018
15:35:04
так меня тут спрашивают про возможность анонса блокчейн хакатона на этом канале

Google
Alexander
05.09.2018
15:35:31
у меня вопрос, разрешить объявление если оно будет явно соотноситься с темой канала и готовы ответить на вопросы, или нет?

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