Alexander
@A64m_qb0 не факт, что наличие правила не приведет к тому, что она останется
Alexander
т.е. факт в том, что правило может сработать
Alexander
а вот гарантировано ли оно сработает - этого я не знаю
Alexander
это лучше на #ghc спросить
Alexander
а у нас есть смотрелки для .hi файлов?
A64m
думаю, что наличие правила или какой-нибудь прагмы инлайн/инлайнабл приведет к сохранению
A64m
Alexander
какие?
A64m
ghc
A64m
есть какой-то ключ
Alexander
вот я тоже что-то такое помню
Alexander
-ddump-hi ?
Alexander
—show-iface
A64m
да, вот этот
A64m
show-iface
Alexander
d65f502e1a7d917e8824882f685ae902
b :: Int
{- HasNoCafRefs, Strictness: m, Unfolding: (I# 2#) -}
Alexander
придумать бы функцию, у которой бы не было unfolding
Alexander
9e8d41913a00d8e9464cd091ba8b397e
b :: Int
{- Inline: -}
"nonsence" forall a = b
Alexander
все равно сработало
Alexander
b :: Int
b = replicate 100 2 !! 99
{-# NoInline b #-}
Alexander
[qnikst@nixos:~/tmp/rew]$ nm -gC A.o
0000000000000038 D A_a_closure
0000000000000018 D A_b_closure
0000000000000118 T A_b_info
Alexander
а для срабатывания правила наличия info да closure достаточно
Alexander
другое дело, что дальше специализировать ты не сможешь
A64m
приняли
https://github.com/ghc-proposals/ghc-proposals/pull/106
Leonid 🦇
и как это поможет с криптой?
A64m
комитетчики немного пошевелились, но про или паттерны так и не вспомнили
как написали
> I will mark the proposal as accepted *unless* I hear a dissenting opinion by the end of next week.
29 июня, так с тех пор у них неделя все не кончается
Alexander
кто знакт как warp завершается?
Alexander
он ждет треды обработчики или нет?
Aleksei (astynax)
@s9gf4ult ^ что мы там выяснили по этому поводу?
Aleksei (astynax)
вроде ждёт
Aleksei (astynax)
(что нам мешало)
Aleksey
ждет
Alexander
тогда вопрос, как сделать чтобы не ждал?
Aleksey
и там есть параметр с таймаутом
Alexander
т.е. мне нужно ждать, но если слишком должго то убить все к чертям
Aleksey
чтобы не ждал X секунд
Aleksey
https://hackage.haskell.org/package/warp-3.2.25/docs/Network-Wai-Handler-Warp.html#v:setGracefulShutdownTimeout
Alexander
угу, пасиб
Dana
а можете подсказать, почему у MonadTrans нет явного ограничения Monad m => Monad (MonadTrans m)?
так нельзя сделать в виде Constraint-а и законы для lift это неявно требуют, но наверняка же есть способ закодировать?
Cheese
ограничения?
Cheese
или нет инстанса (Monad m, MonadTrans t) => Monad (t m)?
Alexander
ограничение может быть если и только если можно выразить левое через правое
Alexander
например, Functor a => Traversible a, т.к. fmap = runIdentity . traverse (Identity . f)
Alexander
т.е. мы смогли имея только методы из Traversible выразить Functor
Alexander
теперь у нас есть MonadTrans:
Alexander
lift :: Monad m => m a -> t m a
Alexander
можем ли мы с его помощью выразить join или (»=) ?
Alexander
и написать bindDefault :: MonadTrans t m a => m a -> (a -> m b) -> m b
Alexander
t аж потерялось
Alexander
без этого свойства в констрейнты класса добавлять для удобства можно, но это плохо
Dana
хорошо, я понимаю, что нельзя просто потому что нет ничего, что делало бы join по t, но несколько смущает, что никакого ограничения, что t m должен быть монадой нет при обьявлении
A64m
(forall m. Monad m => Monad (t m)) => MonadTrans t
Dana
да, что-то в таком духе имею в виду
но его же нет тут https://hackage.haskell.org/package/transformers-0.5.5.0/docs/Control-Monad-Trans-Class.html
A64m
такое можно будет только компилировать компилятором который где-то в течении месяца зарелизят
Dana
спасибо большое
и, если не трудно, можете подсказать, почему раньше не было или что мешало?
A64m
ну, просто не имплементировано было
A64m
находили всякие воркараунды, так что такой уж острой необходимости не было
A64m
где-то с 2000го года эта фича кое-как обсуждалась
Dana
ну, я просто смотрю на https://downloads.haskell.org/~ghc/7.4.1/docs/html/users_guide/constraint-kind.html и он же не позволяет написать так?
(я, на самом деле, плохо понимаю, о чём говорю, и если у вас есть ссылка, которая помогла бы, я был бы благодарен)
Cheese
A64m
нет, не позволяет - это другая фича
https://i.cs.hku.hk/~bruno/papers/hs2017.pdf
Alexander
Dana
спасибо
Cheese
<> = mappend
нет, наоборот, mappend = (<>), и он лишний. ты мне (<>) через mempty вырази
Alexander
Cheese
не тупи
это ты что-то странное пишешь
Alexander
не тупи
Alexander
если у тебя для твоего типа есть реализация Monoid то ты по ней можешь написать реализацию Semigroup
Alexander
используя только те методы которые у меня есть из Monoid
Alexander
если не согласен то перечитай 10 раз
Alexander
как её написать, я сказал выше
Cheese
моноид является полугруппой в теории. Traversable является Functor в теории. ничего не надо выражать
Alexander
что значит "является"
Alexander
мы делаем Functor => Traversible именно потому, что можем написать fmapDefault
Alexander
и выразить через Traversible
Alexander
если что я советую *подумать* над тем, что такое *является*
Alexander
щ.Щ ?
Alexander
зачем