
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

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

Alexander
05.09.2018
06:03:03

Andrei
05.09.2018
09:05:23

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
а можно instance c (Box c) написать? может deriving via как-то в помощь?

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

A64m
05.09.2018
10:36:00
^^ @nexmean

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
угу

A64m
05.09.2018
13:58:02

kana
05.09.2018
13:58:09

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
у меня вопрос, разрешить объявление если оно будет явно соотноситься с темой канала и готовы ответить на вопросы, или нет?

Yuriy
05.09.2018
15:38:37

Александр
05.09.2018
15:51:44