Forwarded from Leonid 🦇 Onokhov
https://t.iss.one/haskellru/211436
Maxim Koltsov:
Подскажите какие-нибудь статьи для понимания monad-control и штук около того?
Kirill Valyavin:
Если unlift годится, фпкомплитовские статьи есть вроде
Зигохистоморфный Препроморфизм:
https://lexi-lambda.github.io/blog/2019/09/07/demystifying-monadbasecontrol/
Maxim Koltsov:
Спасибо
Apfelsinchen Ritter:
Мне кажется, что проще понять unliftio, а на основе этого знания MonadBaseControl. Снойман статейку на fpcomplete когда-то писал.
https://tech.fpcomplete.com/blog/2017/07/announcing-new-unliftio-library
Alexander Vershilov:
используй unliftio
или руками аналог сделать
Maxim Koltsov:
Ну знаешь, в некоторых либах прикручен MonadBase, MonadControl
А почему?
Alexander Vershilov:
Там просто используй его
MonadControl переусложнен из-за того, что там может быть разный base
В итоге инстансы писать действительно не просто после перерыва
Maxim Koltsov:
Ну, я вижу что его используют в библиотеках и хочется понимать :)
Denis Redozubov:
ну идея то простая
Alexander Vershilov:
Напиши 3 инстанса - поймёшь
Denis Redozubov:
был MonadIO m
Alexander Vershilov:
идея очень простая - собрать состояние и воссоздать стек внутри продолжения
Denis Redozubov:
отлепили IO от Monad и параметризовали по нему
ну это уже реализация
Alexander Vershilov:
Ну это идея за monad-control
отличающая его скажем от unliftio
ну часть, которая "автоматом" это отличие
λeonid Onokhov:
идея в том что-бы изнутрей m a выполнять FooT m b
а сам m a выполнять внутре FooT m a
Apfelsinchen Ritter:
Есть у нас стандартная функция
withBinaryFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a
А в проекте у нас есть вместо IO MonadIO, то есть
withBinaryFile' :: MonadIO m => FilePath -> IOMode -> (Handle -> m a) -> m a
unliftio дает нам возможность сделать вот так
withBinaryFile' :: MonadUnliftIO m => FilePath -> IOMode -> (Handle -> m a) -> m a
withBinaryFile' fp mode inner =
withRunInIO $ \runInIO ->
withBinaryFile
fp
mode
(\h -> runInIO (inner h))
Если для нашего m есть инстанс MonadUnliftIO.
Так делать приходиться поскольку есть проблема с позицией аргументов завернутых в m.
https://tech.fpcomplete.com/blog/2016/11/covariance-contravariance
Maxim Koltsov:
Ага, и это обычно бывает только для ридеров всяких
Apfelsinchen Ritter:
Вот для ридеров всяких unliftio и подходит, то есть, там где нет стэйта.
А там где нужен появляются monad-control, monad-base-control, которые могут и стэйт иметь.
Alexander Vershilov:
Ну это не то, чтобы точно
с unliftio или аналогами стейт никто иметь не запрещает
Apfelsinchen Ritter:
Но эти пакеты и более сложные в использовании.
Alexander Vershilov:
С другой стороны у monad-control стейт "чистый"
Apfelsinchen Ritter:
Это да. Тут уже на совести разработчика.
Alexander Vershilov:
И весьма неочевидно себя может вести в присутствии исключений, хотя в lifted-base аккуратненько всё сделано
Maxim Koltsov:
Подскажите какие-нибудь статьи для понимания monad-control и штук около того?
Kirill Valyavin:
Если unlift годится, фпкомплитовские статьи есть вроде
Зигохистоморфный Препроморфизм:
https://lexi-lambda.github.io/blog/2019/09/07/demystifying-monadbasecontrol/
Maxim Koltsov:
Спасибо
Apfelsinchen Ritter:
Мне кажется, что проще понять unliftio, а на основе этого знания MonadBaseControl. Снойман статейку на fpcomplete когда-то писал.
https://tech.fpcomplete.com/blog/2017/07/announcing-new-unliftio-library
Alexander Vershilov:
используй unliftio
или руками аналог сделать
Maxim Koltsov:
Ну знаешь, в некоторых либах прикручен MonadBase, MonadControl
А почему?
Alexander Vershilov:
Там просто используй его
MonadControl переусложнен из-за того, что там может быть разный base
В итоге инстансы писать действительно не просто после перерыва
Maxim Koltsov:
Ну, я вижу что его используют в библиотеках и хочется понимать :)
Denis Redozubov:
ну идея то простая
Alexander Vershilov:
Напиши 3 инстанса - поймёшь
Denis Redozubov:
был MonadIO m
Alexander Vershilov:
идея очень простая - собрать состояние и воссоздать стек внутри продолжения
Denis Redozubov:
отлепили IO от Monad и параметризовали по нему
ну это уже реализация
Alexander Vershilov:
Ну это идея за monad-control
отличающая его скажем от unliftio
ну часть, которая "автоматом" это отличие
λeonid Onokhov:
идея в том что-бы изнутрей m a выполнять FooT m b
а сам m a выполнять внутре FooT m a
Apfelsinchen Ritter:
Есть у нас стандартная функция
withBinaryFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a
А в проекте у нас есть вместо IO MonadIO, то есть
withBinaryFile' :: MonadIO m => FilePath -> IOMode -> (Handle -> m a) -> m a
unliftio дает нам возможность сделать вот так
withBinaryFile' :: MonadUnliftIO m => FilePath -> IOMode -> (Handle -> m a) -> m a
withBinaryFile' fp mode inner =
withRunInIO $ \runInIO ->
withBinaryFile
fp
mode
(\h -> runInIO (inner h))
Если для нашего m есть инстанс MonadUnliftIO.
Так делать приходиться поскольку есть проблема с позицией аргументов завернутых в m.
https://tech.fpcomplete.com/blog/2016/11/covariance-contravariance
Maxim Koltsov:
Ага, и это обычно бывает только для ридеров всяких
Apfelsinchen Ritter:
Вот для ридеров всяких unliftio и подходит, то есть, там где нет стэйта.
А там где нужен появляются monad-control, monad-base-control, которые могут и стэйт иметь.
Alexander Vershilov:
Ну это не то, чтобы точно
с unliftio или аналогами стейт никто иметь не запрещает
Apfelsinchen Ritter:
Но эти пакеты и более сложные в использовании.
Alexander Vershilov:
С другой стороны у monad-control стейт "чистый"
Apfelsinchen Ritter:
Это да. Тут уже на совести разработчика.
Alexander Vershilov:
И весьма неочевидно себя может вести в присутствии исключений, хотя в lifted-base аккуратненько всё сделано
Telegram
Maxim Koltsov in Haskell
Подскажите какие-нибудь статьи для понимания monad-control и штук около того?
Forwarded from Антон
Потому из-за deref coercion на у
&String доступен весь API &str, а единственное, что ты можешь сделать, что в это API не входит - это метод .capacity(). Знать ёмкость строки, не имея возможности её поменять, не имеет большого смыслаForwarded from Kirill Kuzminykh
Эх, блин, прям разочарование года. 😞
Не выходит конфетка из раста - упёрлись видимо в лень разработчиков и фобию бампа мажорной версии. В итоге получим те-же грабли как и в языках с исключениями, когда эти исключения просто игнорятся и не обрабатываются. И это даже сложно будет отследить - толи это разработчик схалтурил и запилил дефолтную ветку, или это была необходимость для сохранения совместимости с новыми версиями другой библиотеки, где может появится новое значение в enum-е.
Не выходит конфетка из раста - упёрлись видимо в лень разработчиков и фобию бампа мажорной версии. В итоге получим те-же грабли как и в языках с исключениями, когда эти исключения просто игнорятся и не обрабатываются. И это даже сложно будет отследить - толи это разработчик схалтурил и запилил дефолтную ветку, или это была необходимость для сохранения совместимости с новыми версиями другой библиотеки, где может появится новое значение в enum-е.
Forwarded from Ilya Bogdanov 🦀
в чем проблема использовать failure? последний раз вручную написанные энамы видел год назад
Αλεχ Zhukovsky:
@lkppl слушай, ты помнишь спрашивал про то, вызывает ли УБ в си УБ в расте? где тебе отвечали?
Roman Proskuryakov:
в ишью Ральф ответил, что да. И дополнили доку пунктом, но потом это удалили, хз почему
Αλεχ Zhukovsky:
https://github.com/rust-lang-nursery/reference/issues/485
сам нашел)
@lkppl слушай, ты помнишь спрашивал про то, вызывает ли УБ в си УБ в расте? где тебе отвечали?
Roman Proskuryakov:
в ишью Ральф ответил, что да. И дополнили доку пунктом, но потом это удалили, хз почему
Αλεχ Zhukovsky:
https://github.com/rust-lang-nursery/reference/issues/485
сам нашел)
GitHub
Is UB in FFI also UB in Rust? · Issue #485 · rust-lang/reference
Link to ref: https://doc.rust-lang.org/reference/behavior-considered-undefined.html Warning: The following list is not exhaustive. There is no formal model of Rust's semantics for what is and i...
Forwarded from Bogdan
Forwarded from Aleksei (astynax) Pirogov
А если обмазаться типотой и генератой — будет тяжко
Forwarded from Aleksei (astynax) Pirogov
Вон, у Сноймана, наверное, всё ок с RIO
Forwarded from Yuriy Syrovetskiy
кстати, если кому мало -Wall, добавляйте -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
Forwarded from Алексей Худяков
Русские хакеры взломали не только американские выборы, но и Столлмана?
Forwarded from A64m AL256m qn<cores> I0
надышался в помещении, в котором было сильно назиговано
Forwarded from Ανδριούχα και Κουκούχα
эта чтоли? https://www.programmer-books.com/haskell-high-performance-programming/ PACKT мусорное издательство имхо
Programmer Books
Haskell High Performance Programming - Programmer Books
Book Description: Haskell, with its power to optimize the code and its high performance, is a natural candidate for high performance programming. It is especially well suited to stacking abstractions high with a relatively low performance cost. This book…