Artem
А есть какие-то хаки, что бы везде не писать теперь unwrapAndStringify @CAST_TYPE ...?
A64m
так ему неоткуда узнать к какому типу кастить иначе
A64m
если бы возвращаемый тип бвл тот к которому кастить, не понадобилось бы аннотировать
A64m
все зло от show
Alexander
ну или не coerce я что-то из generic-lens/lens использовать
A64m
но его тоже можно взять из парметра функции, которая unwrapAndStringify использует
Artem
chatId' = unwrapAndStringify @ChatId ... Error: Couldn't match representation of type ‘b0’ with that of ‘Integer’ arising from a use of ‘unwrapAndStringify’
Artem
A64m
ну или не coerce я что-то из generic-lens/lens использовать
ну да, линзой на первую позицию можно из любой обертки с дженерик инстансом доставать
Alexander
контекст
Alexander
Всем привет. Есть ли в Haskell способ сделать деструктуризацию значения из конструктора полиморфно? Хотелось бы вместо этого: chatId' = (\(ChatId id) -> show id) . chatId . messageChat <$> mСделать что-то вроде этого: chatId' = show . UNPACK_CONSTRUCTOR_FN . chatId . messageChat <$> m
Alexander
@js_monk chatId' = show @Integer . coerce .charId . messageChat <$> m не работает?
Artem
Так работает
Alexander
отлчино
Artem
Спасибо большое :3
Alexander
ты выше просишь привести к @ChatId
Alexander
в то время как по условию задачи ты хотел наоборот к распакованному значению
Alexander
с type applications понимаешь как работает
Artem
Не особо
Alexander
надо рассказывать?
A64m
ну это как во всех языках с параметрами типов только вместо foo<_, Bar, _> будет foo @_ @Bar
Alexander
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extension-TypeApplications
A64m
порядок параметров указывается в forall
A64m
для того чтоб ссылаться на параметры из схемы типа в коде функции надо ScopedTypeVariables
A64m
для того чтоб компилятор разрешал писать код, который без указания типов через @ не работает нужен AllowAmbiguousTypes
Artem
Спасибо большое
Artem
😊
Artem
А как так может быть, что в do-нотации не выполняется одна из функций(в дебаге не заходит туда даже)? ShouldBeDeleted msg -> model <# do fetch $ deleteMessage msg fetch $ banUser msg return NoOpНе заходит в banUser
Artem
Я так понимаю это из-за ленивости
Artem
Но не пойму как это фиксить :С
Cheese
это функции из какой библиотеки?
кана
На первый взгляд выглядит как из либы для элм-лайк телеграм-ботов физрука
Cheese
вряд ли там лень будет пропускать монадные действия
Cheese
скорее, перепутался идентификатор пользователя или что-то в этом духе
Cheese
или функция banUser не реализована
Cheese
NoOp выглядит как-то подозрительно
Artem
Все самописное
Artem
Хмм, просто когда я их меняю местами, у меня banUser вызывается, а deleteMessage - нет
Cheese
instance Monad тоже самописный?
Alexander
что за Monad там используется?
Artem
Нет, ‘ClientM’ из Servant
Alexander
а fetch откуда?
Alexander
(или лучше как debug отладка сделана была(
Alexander
т.к. у servant нормально с выполнением такого
Artem
Это fetch fetch :: ClientM a -> BotM () fetch a = void $ liftClientM $ aА дебажил с помощью ghci
Artem
Ох
Alexander
вот, BotM а не client M
Artem
Опростоволосился :( Монада то не ClientM а BotM
Alexander
откуда BotM и какой у него инстас monad
Anatolii
это бот физрука
Anatolii
но с ним все ок
Artem
Бибилотека telegram-bot-simple, а BotM: newtype BotM a = BotM { _runBotM :: ReaderT BotContext ClientM a } deriving (Functor, Applicative, Monad, MonadReader BotContext, MonadIO)
Artem
Почему физрук? :D
Anatolii
ну посмотри автора либы на гитхабе:)
Cheese
@fizruk31337
Artem
Ааа, я только имя просто видел, nick_name не увидел
Artem
Забавно
Alexander
страннота
Alexander
но, я бы дебажил через Debug.Trace.traceM
A64m
Новых фич так мало, что я теперь отслеживаю даже нанофичи ### 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
Надо доки почитать
Anatolii
Может там ошибка возвращается от вам телеграмма
Artem
Так я не юзера удаляю, а его сообщение
Alexander
некоторые формы бана удаляют все сообщения кстати
Alexander
во всяком случае если человек банит
Artem
При дебаге просто пропускается строчка со второй функцией и сразу идет в return
Artem
:C
Artem
При том, что сообщение/или юзер удаляются("или"- потому что я менял местами их и смотрел в дебаге)
Alexander
сделай traceM
Artem
Оу
Artem
Он даже в return не идет
Artem
Вызывает banUser и все
Alexander
может исключение какое?
Artem
Но оно бы тогда отписало в терминале, правда?
Alexander
наверное, но это не точно
Alexander
зависит от того, что model делает
Kirill
про исключения напомнило о том как acid-state их просто зажёвывает :)
Alexander
да, такое бывает
Artem
И как их отловить, если они зажевываются?