@haskellru

Страница 412 из 1551
Alexander
18.09.2017
22:03:01
в первой ветке SAllIntent IntentTask, во второй SAllIntent IntentChart`

тут только если unsafeCoerce ?

но это странный путь

вообще скорее надо так:

Google
Vyacheslav
18.09.2017
22:03:45
ну так я хочу чтобы результат был полиморфен по b

Alexander
18.09.2017
22:03:54
data SomeIntent = SomeIntent (forall s . SAllIntent s))

как?

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

а не ты его определяешь

пути решения: 1. колдовать с сиглетонами и eqT 2. написать instance SAllIntent SIntentTask и instance SAllIntent SIntentChart 3. сделать data SomeIntent

про первое лучше к @int_index обратиться, поидее оно должно решаться, но я такой ад не люблю и не знаю точно

@termina1 у тебя есть пример на 1 файлик, я могу поиграться тогда локально

о, там ещё и type synonym

ты точно делаешь то,что надо?

@termina1 это компиляется: {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE OverloadedStrings #-} import Data.Aeson import Data.Singletons import Data.Singletons.TH singletons [d| data AIIntent = IntentTask | IntentChart |] instance FromJSON (SAIIntent 'IntentTask) where parseJSON (String "create_task") = return SIntentTask parseJSON _ = fail "foo" instance FromJSON (SAIIntent 'IntentChart) where parseJSON (String "send_task") = return SIntentChart parseJSON _ = fail "Unknown action"

как я и говорил, но учитывая TypeSynonymInstances я бы наверное испугался это запускать ?

Vyacheslav
18.09.2017
22:16:55
короче я кажется смог

Google
Vyacheslav
18.09.2017
22:17:05
через какое-то подобие зависимой пары

Alexander
18.09.2017
22:20:04
я задачу до конца не знаю так что..

Vyacheslav
18.09.2017
22:20:58
ну это я про другое

Alexander
18.09.2017
22:23:37
@Masteroid не удобно

доабвлять удалять сортировать и диффы больше

а переключаться между стилями ради пасты лень

@termina1 https://gist.github.com/qnikst/5579254757eb7d40f1e50a2e4039c60d

смотри, там инстансы для конкретных и неизвестно какого типа

Just IntentTask Nothing Nothing Just IntentChart Just task Just chart

Vyacheslav
18.09.2017
22:25:46
ты в итоге спрятал a

Alexander
18.09.2017
22:25:46
выхлоп test

Vyacheslav
18.09.2017
22:25:48
а она мне нужна

Alexander
18.09.2017
22:26:14
что значит спрятал, инстанса с неспрятанным a быть не может

Vyacheslav
18.09.2017
22:26:30
ну да, поэтому я в целом кажется по другому решил эту проблему

Alexander
18.09.2017
22:27:00
ну вот у меня все решается, если юзер знает a он дает конкретное, если не знает до достает `SI`и делает case

там внутри будут 2 ветки, в каждой из которых значение определено

но вообще эта задача не похожа на разумную

Vyacheslav
18.09.2017
22:29:38
задача в целом разумная

просто не для хаскелла

Google
Vyacheslav
18.09.2017
22:32:24
@qnikst спасибо, идею кажется понял попробую так

Alexander
18.09.2017
22:32:41
для хаскела подходит любая задача

это ж у тебя должен был быть случай где запрос определяет ответ?

просто если сформулируешь задачу, то возможно я знаю решение неплохое без синглтонов как библиотеки, но то же по принципу

@termina1 вообще я нашёл исходный пост и подозреваю, что проще будет как писал @int_index просто ADT data Action where CreateChart :: String -> String -> Action CreateTask :: String -> Data -> String -> Action instance FromJSON Action where parseJSON x = object "task" $ \o -> asum [ CreateChart <$> o .: "create_chart" <*> (o .: "params" >>=) .: "url" , CreateTask <$> o .: "create_task") <*> (o .: "params" >>=) .: "date" <*> (o .: "params" >>=) .: "something" ] что тут есть - возвращается правильный Action с правильными параметрами

почему так, т.к. у тебя запрос формируется из данных в одном месте и здесь гораздо проще поддерживать консистентность таким образом

GADT и DataKinds и Singletons нужны уже если нужно связывать между собой вещи в разных местах

впрочем часто можно обойтись и без: data SomeAction = CreateAction CreateChart | TaskAction CreateTask

тогда посте паттерн матчинга можно таскать с собой объект

Aleksey
19.09.2017
07:37:28
Как в TH, имея reified тип, применить оный в сигнатуре выражения, вычисляемого в шаблоне?

Мне нужно специфицировать тип для полиморфной функции, которую я дёргаю в шаблоне

Хотя не, я хочу от TH того, чего он не может мне дать :(

Denis
19.09.2017
07:47:10
ну что за убожество https://medium.com/javascript-scene/javascript-monads-made-simple-7856be57bfe8

illiatshurotshka❄️
19.09.2017
07:48:38
>медиум >что за убожество

тавтология

Aleksey
19.09.2017
07:50:41
Ну так на медиум такие статьи и пишут в основном. Кроме медиума ещё на dev.to такое часто встречается

Alexander
19.09.2017
07:52:08
а чем она точнее?

у тебя тут явно связан тип запроса и параметры

Vyacheslav
19.09.2017
07:52:52
Тем что в объекте есть поле action, от которого зависит тип поля parameters

Google
Vyacheslav
19.09.2017
07:53:11
Тип запроса я заранее не знаю

А тут я эту связь типа действия и типа параметров никак не отражаю

Поэтому она менее точная

Vasiliy
19.09.2017
08:08:20
CreateChart :: String -> String -> Action - по-моему, вполне точная связь между CreateChart и парой строк

Alexander
19.09.2017
08:16:40
у меня в коде абсолютно точная связь между action и parameters

и предположения о том, что мы знаем тип запроса нет

Vyacheslav
19.09.2017
08:28:49
Нет, никакой связи, она только на уровне кода выражена

А на уровне типов нет

То есть я из типа общего результата не могу сказать какие параметры он содержит

Alexander
19.09.2017
08:50:55
ложь

точнее не так

из *типа* результата, ты знаешь какие параметры он содержит

с другой стороны с + одним слоем индирекции уже можешь

как я написал выше

решение с дата кайнд не приносит ни единого плюса по сравнению с таким решением в этой задаче

Alexander
19.09.2017
08:56:40
но ты и с синглетонами это не знаешь

максимум ты можешь вернуть это dependent pair или аналог

это *ничем* не отличается от того, что ты вернёшь data Action = ActionTask AITask | ActionChart AICHart ; data AITask = AITask TaskParams ; data AIChart = AICHart CHartParams

dependent pair не дает никакого плюса по сравнению с этим решением

Google
Alexander
19.09.2017
08:58:40
т.к. конструктор в ActionTask, ActionChar играет ту же роль, что и синглтон

а пишется все на порядок проще

Vyacheslav
19.09.2017
09:04:18
но ты и с синглетонами это не знаешь
Я могу как раз знать, сказав что жду конкретный тип

Не полиморфный ко кайнду

Alexander
19.09.2017
09:04:51
мне кажется, что вчера весь разговор был из того, что ты не знаешь что приходит?

это уже другое дело

Vyacheslav
19.09.2017
09:05:11
Есть функция которая должна быть полиморфно, а другим необязательно

В общем, попытка запихнуть завтипы в хаскелл без полной из поддержки пока провалилась

Alexander
19.09.2017
09:07:54
я вчера написал работающий код, какая в нём проблема?

SI это был тебе dependent-pair, это не тот случай, где в haskell нельзя реализовать ничего

@termina1 в общем напиши список функций, которые тебе нужны и я модифицирую вчерашний пример

Vyacheslav
19.09.2017
10:09:40
спасибо, я подход понял, дальше сам)

Alexander
19.09.2017
10:11:08
я просто несколько написал, я бы навернове сам запутался

из гиттера попросили передать: > Nop Nopovich @Nop58284650_twitter 13:22 > привет всем > прост хочу сказать, что к нам на fby.by в этом году приедут Миша Снойман (автор Yesod), Бартош Милевский (https://bartoszmilewski.com/), Денис Шевченко (https://www.ohaskell.guide/), Алехандро Серано Мена (https://www.amazon.com/Beginning-Haskell-Alejandro-Serrano-Mena/dp/1430262508) и много других спикеров > Ждем вас в гости!

Dmitry
19.09.2017
10:36:31
Александр Вершилов: спасибо, что запулил моё сообщение

ну я еще добавлю от себя. что конфа пройдет 17-го декабря, и что помимо докладов будут еще воркшопы по Elm и Haskell

Anatolii
19.09.2017
10:37:07
Может его запинить?

Vadim
19.09.2017
10:38:37
у вас на сайте написано 2016 год

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