@haskellru

Страница 1469 из 1551
Alexander
17.09.2018
09:16:48
но полурешеток вроде нету

Yuriy
17.09.2018
09:17:54
раздельные есть в lattices

простую я сам изобретал

Alexander
17.09.2018
09:27:54
фигово, что нельзя простым образом добавить в base

Google
Alexander
17.09.2018
09:28:03
т.к. сложность бешено быстро растет

сложность программирования

Pineapple
17.09.2018
09:29:25
Что именно? Более вменяемые классы для чисел?

Alexander
17.09.2018
09:30:09
ага

ну вообще всю эту алгебру честную бы засунуть

у нас только vector-space и numeric-prelude как эксперименты

Pineapple
17.09.2018
09:30:47
Ну хотя бы выдрать аддитивную группу и кольцо из Num

Alexander
17.09.2018
09:31:25
может возможнен промежуточный вариант, достать все честные структуры

Pineapple
17.09.2018
09:31:35
Ну хотя бы аддитивную группу

Yuriy
17.09.2018
09:31:41
и fromInteger отделить как синтаксический костыль

Alexander
17.09.2018
09:31:46
и в transition period сделать Num зависяшим от себя

да-да-да

реально бесит

Google
Pineapple
17.09.2018
09:32:22
Всех — слишком много. Выходит по классу на операцию :( С одной стороны так и надо, с другой — морочно

Alexander
17.09.2018
09:33:20
ну т.е. будет промежуточный вариант, хочешь - используешь, не хочешь берёшь Int/Double где все есть

A64m
17.09.2018
09:33:27
Alexander
17.09.2018
09:33:47
о кметтопакет

Alexander
17.09.2018
09:36:25
Вопрос, а почему я в рамках ду нотации часто вижу pure вместо return? Экономия на символах?

A64m
17.09.2018
09:37:11
некоторые считают такой подход более принципиальнм

return - это реликт со времен, когда Monad и Applicative не были в одной иерархии

Yuriy
17.09.2018
09:40:08
у меня получилась такая иерархия class CFoo a where foo :: TFoo class CFoo a => CFooBar a where foobar :: TFooBar class CFoo a => CFooBaz a where foobaz :: TFooBaz fooViaBar :: TFooBar -> TFoo fooViaBaz :: TFooBaz -> TFoo data X instance CFoo X where foo = fooViaBar instance CFooBar X where foobar = (realImplementation) data Y instance CFoo Y where foo = fooViaBaz instance CFooBaz Y where foobaz = (realImplementation) чувствую, что-то не так, но не могу понять как правильно. что посоветуете?

Alexander
17.09.2018
09:40:50
некоторые считают что return путает людей

и.к. это не ретурн из императивных яп

Aleksey
17.09.2018
09:41:36
"pure - для аппликативных выражений, return - для do-блоков" :)

Yuriy
17.09.2018
09:41:49
Pineapple
17.09.2018
09:46:56
Нужны классы-синонимы. Тогда развесистые иерархии не страшны и можно дробить тайпкласссы. Что-то вроде class Functor a => Applicative a = Pointed a, Apply a class Pointed ... class Apply ... Можно объявлять инстансы по отдельности, а можно вместе. instance Applicative даёт инстансы Pointed и Apply, инстансы Pointed и Apply дают Applicative

Pineapple
17.09.2018
09:47:29
Гранулярная иерархия становится нестрашной

Google
Pineapple
17.09.2018
09:50:06
Да, плюс сахар для объявления инстансов

instance Applicative f where pure = ... (<*>) = ... рассахаривается в instance Pointed f where pure = ... instance Apply f where (<*>) = ...

Yuriy
17.09.2018
09:50:53
Да, плюс сахар для объявления инстансов
а, это про алгебру, не про мой вопрос?

Pineapple
17.09.2018
09:51:34
Это про страдания с классами.

Тредов нет

всё вперемешку

Alexander
17.09.2018
09:51:48
а ещё можно Old.Applicative

+ deriving via

Pineapple
17.09.2018
09:53:07
Просто в этом случае мы автоматически получаем инстансы для Pointed и Apply. Для всех типов, где есть Applicative

Alexander
17.09.2018
09:54:19
но с дерайвинг в другую сторону не будет

Pineapple
17.09.2018
09:55:08
А тут в обе стороны

Основная идея тут сделать возможным дробление тайпкласссов

Yuriy
17.09.2018
09:55:51
если менять язык, то можно создавать автоматические классы из функций. правда, все сразу начнут создавать мультиметоды — беззаконные классы

classy (+) :: a -> a -> a instance (+) :: Int -> Int -> Int where ....

Pineapple
17.09.2018
09:57:11
Автоматические классы?

Yuriy
17.09.2018
09:57:44
Pineapple
17.09.2018
09:57:56
Это уже что-то нездоровое, кмк

Мои идеи дальше дробления тайпклассов не идут

В смысле уменьшения боли от дробления

Alexander
17.09.2018
10:11:11
т.е. если я в либе ввожу Pointed и Apply то я могу их автоматом получить если у меня есть type Applicative = (Pointed, Apply) ?

Google
Alexander
17.09.2018
10:11:38
и если я что-то ввожу в своей либе, то если у меня будут Pointed и Apply то я получу Applicative бесплатно?

Pineapple
17.09.2018
10:14:00
Идея в том, что в base поменяли определение Applicative, и все, кто объявил инстанс Applicative получает бесплатно инстансы Pointed и Apply. В другой стороны их можно объявлять по отдельности и необярательно оба

В общем да

A64m
17.09.2018
10:20:06
Время для добавления такой фичи упущено, такой пропозал просто заболтают потому что каждый имеет по этому вопросу мнение

kana
17.09.2018
10:23:21
Что-то тут не так. Почему имена полей разные, а типы соответствуют? Так надо?
ну мы сначала требуем линзу для поля "a" из String в Int, на выходе получаем r1 потом требуем для r1 линзу для поля "b" из Int в String, на выходе r2

Dmitry
17.09.2018
10:24:27
почему в Int преобразуем поле "a", а из Int уже "b"?

В любом случае, я думаю, что должно быть что-то вроде f :: forall r1. (HasField name r r1 ..., HasField name r1 r2 ...) => Record r -> Record r2С указанием @r1 при вызове f

kana
17.09.2018
10:32:33
почему в Int преобразуем поле "a", а из Int уже "b"?
ну это функция вида: { a :: String, b :: Int | r } -> { a :: Int, b :: String | r }

Daniel
17.09.2018
10:32:40
Никто не пробовал делать авторизация через auth0 на хаскеле? Думаю рест апи сервак на хаскеле запилить, но auth0 нужен

Admin
ERROR: S client not available

kana
17.09.2018
10:32:47
f :: HasField "a" r0 r1 String Int => HasField "b" r1 r2 Int String => Record r0 -> Record r2 f = (field @"b" %~ show) . (field @"a" %~ length)

Alexander
17.09.2018
10:32:59
auth0 == OAuth?

https://auth0.com/

или это?

Alexander
17.09.2018
10:34:22
чем auth0 отличается от стандартного OAuth?

Dmitry
17.09.2018
10:38:23
f :: HasField "a" r0 r1 String Int => HasField "b" r1 r2 Int String => Record r0 -> Record r2 f = (field @"b" %~ show) . (field @"a" %~ length)
ага... т.е. мы меняем разные поля (и их типы). Типы случайно совпали как при композиции поля - String -> Int, Int -> String

Daniel
17.09.2018
10:39:10
или это?
На который ты ссылку прислал, просто у нас много чего через него работает

Google
kana
17.09.2018
10:40:22
auth0 == OAuth?
ну вроде oauth это проток

а auth0 - сервис

Alexander
17.09.2018
10:40:49
да, но является ли auth0 просто сервисом поддерживающим OAuth

или предоставляет какое-то дополнительное API которое нужно и используется

потому, что в первом случае нужно просто позвать нужные методы из oauth пакета, который есть с адресом сервиса

а во втором - нужно писать самому

Dmitry
17.09.2018
10:42:15
@kana_sama Думаю, в f надо добавить forall r1.. А при вызове f @R1.

kana
17.09.2018
10:44:48
@kana_sama Думаю, в f надо добавить forall r1.. А при вызове f @R1.
нет-нет, код выше работает прекрасно же

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

типа forall r0 r2. Delta [("a", A, B), ("b", C, D)] r0 r2 === forall r0 {r1} r2. (F "a" r0 r1 A B, F "b" r1 r2 C D)

но этого нельзя делать в семействе

Dmitry
17.09.2018
10:47:59
"этого" - это чего? forall?

kana
17.09.2018
10:48:43
да, нельзя скрыть внутри forall r1

Dmitry
17.09.2018
10:50:09
от forall здесь вроде мало толку все равно. Потом придется это "доказывать". Надо конкретно вычислять. Не для произвольных r, а для каких-то твоих обобщенных рекордов. Мне кажется так.

Yuriy
17.09.2018
10:58:05
да, но является ли auth0 просто сервисом поддерживающим OAuth
в общем случае нет, auth0 даёт тебе возможность управлять аккаунтами твоих пользователей

да, но является ли auth0 просто сервисом поддерживающим OAuth
а с того конца, где авторизация, там да, OAuth, или OpenID Connect, или SAML

Alexander
17.09.2018
11:01:46
ну т.е. для полноценного взаимодействия нужна либа

которую надо написать и помочь сообществу

Yuriy
17.09.2018
12:06:32
Ассоциированный тип в Foo и диспетчеризация по нему?
а как правильно диспетчеризоваться по ассоциированному типу? синглтоны? или создать искусственный класс с искуственными инстансами?

kana
17.09.2018
12:13:02
завтипы) Чет подобная тема только что возникала в блахе

Yuriy
17.09.2018
12:14:29
не пойду же я в бла за ответами по Хаскелю

Alexander
17.09.2018
12:40:45
у тебя в примере как-то типы не сходятся

или fooViaBar игнорируют параметр?

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