@haskellru

Страница 1500 из 1551
Alexander
04.10.2018
20:39:13
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extension-TypeApplications

A64m
04.10.2018
20:39:33
порядок параметров указывается в forall

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

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

Google
Artem
04.10.2018
20:42:21
Спасибо большое

?

А как так может быть, что в do-нотации не выполняется одна из функций(в дебаге не заходит туда даже)? ShouldBeDeleted msg -> model <# do fetch $ deleteMessage msg fetch $ banUser msg return NoOpНе заходит в banUser

Я так понимаю это из-за ленивости

Но не пойму как это фиксить :С

Yuriy
05.10.2018
05:07:09
это функции из какой библиотеки?

kana
05.10.2018
05:23:17
На первый взгляд выглядит как из либы для элм-лайк телеграм-ботов физрука

Yuriy
05.10.2018
05:48:19
вряд ли там лень будет пропускать монадные действия

скорее, перепутался идентификатор пользователя или что-то в этом духе

или функция banUser не реализована

NoOp выглядит как-то подозрительно

Artem
05.10.2018
07:01:34
Все самописное

Хмм, просто когда я их меняю местами, у меня banUser вызывается, а deleteMessage - нет

Google
Yuriy
05.10.2018
07:19:13
instance Monad тоже самописный?

Alexander
05.10.2018
08:10:07
что за Monad там используется?

Artem
05.10.2018
08:28:55
Нет, ‘ClientM’ из Servant

Alexander
05.10.2018
08:36:25
а fetch откуда?

(или лучше как debug отладка сделана была(

т.к. у servant нормально с выполнением такого

Artem
05.10.2018
08:50:28
Это fetch fetch :: ClientM a -> BotM () fetch a = void $ liftClientM $ aА дебажил с помощью ghci

Ох

Alexander
05.10.2018
08:51:42
вот, BotM а не client M

Artem
05.10.2018
08:51:48
Опростоволосился :( Монада то не ClientM а BotM

Alexander
05.10.2018
08:51:51
откуда BotM и какой у него инстас monad

Anatolii
05.10.2018
08:52:40
это бот физрука

но с ним все ок

Artem
05.10.2018
08:53:07
Бибилотека telegram-bot-simple, а BotM: newtype BotM a = BotM { _runBotM :: ReaderT BotContext ClientM a } deriving (Functor, Applicative, Monad, MonadReader BotContext, MonadIO)

Почему физрук? :D

Anatolii
05.10.2018
08:53:28
ну посмотри автора либы на гитхабе:)

Yuriy
05.10.2018
08:53:56
@fizruk31337

Artem
05.10.2018
08:54:00
Ааа, я только имя просто видел, nick_name не увидел

Забавно

Alexander
05.10.2018
09:00:29
страннота

Google
Alexander
05.10.2018
09:00:50
но, я бы дебажил через Debug.Trace.traceM

A64m
05.10.2018
09:29:51
Новых фич так мало, что я теперь отслеживаю даже нанофичи ### Allow (unparenthesized) kind signatures https://github.com/ghc/ghc/commit/bace26aadaafa4064e78f9ed088c1e2217221acc https://phabricator.haskell.org/D5173 [t :: MyKind] (a :: k, b) ### Parse the (!) type operator and allow type operators in existential context https://github.com/ghc/ghc/commit/bd7898537768f936d05c0c83eef1cd9b00933347 https://phabricator.haskell.org/D5180 class a ! b data D4 = forall a b. a ! b => D4 !a !b

Anatolii
05.10.2018
09:30:51
Надо доки почитать

Может там ошибка возвращается от вам телеграмма

Artem
05.10.2018
09:33:58
Так я не юзера удаляю, а его сообщение

Alexander
05.10.2018
09:34:19
некоторые формы бана удаляют все сообщения кстати

во всяком случае если человек банит

Artem
05.10.2018
10:21:09
При дебаге просто пропускается строчка со второй функцией и сразу идет в return

:C

При том, что сообщение/или юзер удаляются("или"- потому что я менял местами их и смотрел в дебаге)

Alexander
05.10.2018
10:23:29
сделай traceM

Artem
05.10.2018
10:35:19
Оу

Он даже в return не идет

Вызывает banUser и все

Alexander
05.10.2018
10:36:20
может исключение какое?

Artem
05.10.2018
10:36:52
Но оно бы тогда отписало в терминале, правда?

Alexander
05.10.2018
10:37:27
наверное, но это не точно

зависит от того, что model делает

Kirill
05.10.2018
10:46:35
про исключения напомнило о том как acid-state их просто зажёвывает :)

Google
Alexander
05.10.2018
10:47:11
да, такое бывает

Artem
05.10.2018
11:06:18
И как их отловить, если они зажевываются?

Alexander
05.10.2018
11:13:10
ну сначала проверить зажевываются ли

вообще странно если это сгенерированное сервантом код то не должны

Kirill
05.10.2018
11:54:35
И как их отловить, если они зажевываются?
яб форснул явно шаги для начала, через evaluate

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

Alexander
05.10.2018
11:56:48
ClientM это ExceptT IO

Kirill
05.10.2018
11:58:18
ну Handler тоже

Alexander
05.10.2018
11:59:08
если оно там все сверхленивое, то и deleteMessages незачем выполняться

хотя у меня нигде подобное поведение не наблюдается

Alexander
05.10.2018
11:59:43
а зачем вообще существует ленивое IO?

Alexander
05.10.2018
11:59:59
итеративность бесплатно

Kirill
05.10.2018
12:00:02
lazy IO тут вроде непричём

Alexander
05.10.2018
12:00:07
но поведение выше это не ленивое IO

ленивое IO это readFile

например

когда ты получаешь на выходе "строку" а по факту читаешь файл по надобности

Kirill
05.10.2018
12:02:40
ленивую "строку"

Alexander
05.10.2018
12:02:54
да

Maxim
05.10.2018
12:53:15
слушайте, а если я вызываю FFI функцию, которая внутри запускает свой event loop и управление назад в хаскель не отдает, ее можно как-то прибить асинхронным исключением из другого потока?

Google
A
05.10.2018
13:03:02
можно знаешь что?

Alexander
05.10.2018
13:03:44
@maksbotan есть interruptible

Maxim
05.10.2018
13:04:13
что interruptible?

Alexander
05.10.2018
13:04:33
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi-chap.html#interruptible-foreign-calls

посмотри как это там сделано

вообще чаще у event_loop есть свой API

Maxim
05.10.2018
13:05:46
ну у меня такой код withAsync foo $ \t -> link t runUI

хочется, чтобы когда foo кидал исключение, runUI бы умирал

для этого я вписал link

но не работает, потому что runUI вызывает FFI, из которого нет возврата

можно запустить свой хендлер, который вызовет exit евент лупа если foo сдох...

что лучше, это или сделать interruptible?

Alexander
05.10.2018
13:07:59
зависит от того, что там в runUI

Maxim
05.10.2018
13:08:28
QCoreApplication.exec там

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

Alexander
05.10.2018
13:09:05
я ну буду читать их свойства, я не знаю как оно будет реагировать на сигнал

если умирать, то interruptible - ok

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