Alexander
Aliester
не, вроде его цитата
Alexander
Ну ладно тогда.
кана
интересно, какую именно терминалогию он имеет в виду: если базовые функтор/монада/моноид - то не могу согласиться, это появляется и в других языках, а замена одних названий на другие почти ничего не изменит (если назвать монаду флэтмапабл, то лучше понимать не станут..., наверное). Если про кметовские паиринги комонад и монад какие - этого мало и эти люди тихо занимаются своими абстракциями в своих блогах
кана
@bravit111
Vitaly
Просто это были настолько распространённые фразы, что уже как common knowledge
Andrei
Alexander
Alexander
там была диаграмка
Vitaly
Alexander
Alexander
Vitaly
😂
Так, я соврал, правильное название «незакавыченная цитата»
Aliester
когда твитер прорывается в реальный мир и ты видишь Брагилевского в чате
Alexander
Окей :)
Alexander
А как может выглядеть крестовый поход против пуристов? Будем исключать их из чатиков?
Андрей
под пуристами в этом чате что имеется ввиду?
Aliester
остракизм
Aliester
отлучение от коммюнити
Антон
Aliester
неприем на работу
Alexander
категорию образуйте сначала! а потом в походы ходите :P
Aliester
обидные обзывательства
Антон
Aliester
каждая жопа немного тор
Андрей
двигать
Alexander
/me пристально ищет ⊥ в ByteArray#
Alexander
не нашёл
Alexander
Просто она приходит, когда ее не ждешь и не ищешь.
Alexander
в unlifted типах, не приходит никогда
Alexander
Alexander
unsafePerformIO относится к проблеме чуть менее, чем никак
Alexander
и его наличие, никак не создаст bottom в unlifted типах
Alexander
Вот странно, unsafePerformIO есть, а жопы нет
Alexander
это конечно смешно, но я могу только посоветовать ознакомиться с документацией ещё раз
Alexander
чтобы не мешать не связанные вещи друг с другом
Alexander
Это хороший совет, спасибо.
Anonymous
Так разговор не про это, а про то, что не стоит быть пуристом. Совсем упоротым тобишь. Чуть-чуть можно.
Alexander
сделать bottom с unlifted типом можно (было) только при unsafeCoerce#
Alexander
которое может кастануть lifted объект к unlifted
Alexander
тип, а не объект, конечно же
Alexander
с unlifted можно получить только _|_ в виде бесконечного вычисления
Андрей
ну так пока на хаскеле пишешь и всё чисто - проблем нет и быть не может
Андрей
я про то, что выбор "не быть пуристом" звучит странно в хаскель чате
Alexander
я, кстати, не знаю примеров людей которых имеют ввиду
Alexander
вот кто говорит, что не знаешь ТК - недостоин?
Leonid 🦇
/me вообще в последнее вермя перестал обращать внимание на мнение тех у кого нет хаскеля в продакшене
Alexander
но он уже есть почти у всех, а мнения отличаются?
Leonid 🦇
/вставить цитату полонского
Антон
Alexander
for some definition of production
Alexander
вон, есть ли у @bravit111 идрис и haskell в продакшене, учитывая, что у него продакшн это учить студентов и писать статьи
Leonid 🦇
Alexander
Это хороший совет, спасибо.
unsafePerformIO вообще достаточно безобидное, можно конечно заалиасить вещи, если не написать {-# NOINLINE #-},
и если очень неосторожным быть то даже unsafeCoerce переизобрести. Но новых неожиданных bottom-ов оно не добавляет
Alexander
А уж сколько таких "невинных" хаков в PureScript...
Антон
Alexander
Там reinterpret_cast, когда делают "заныривание" в JS и "выныривание" оттуда с уже новым типом.
Alexander
main = do
let ref = unsafePerformIO $ newEmptyMVar
putMVar ref 65
putStrLn =<< takeMVar ref
Alexander
вот как-нить так
Alexander
про purescript ничего сказать не могу
Alexander
Ну, unsafePerformIO используется для паттерна с глобальными переменными (или настройками, или переменными окружения). Хотя этот паттерн и не особо нужен.
Alexander
но то что выше можно записать для Storable через
storableCoerce :: (Storable a, Storabel b) => a -> IO b
storableCoerce a = alloca $ \ptr -> peek =<< castPtr <$> poke ptr a
Alexander
много для чего он может использоваться
Alexander
для анализа памяти возвращаемой FFI вызовами в матчингах и т.п.
Alexander
но там лучше использовать более опасные варинты типа inlineIO и unsafeDupablePerformIO, но там нужно следить, чтобы data dependency было
Alexander
иначе можно как в байтстрингах получить веселье
Leonid 🦇
accursedUnutterablePerformIO
Alexander
ну оно длинное
Alexander
inlineIO - тоже самое
Alexander
но это для morally pure функций
Alexander
аллокация сишного объекта, не такая (а в байтстрингах было так)
Alexander
в общем мой point был в том, что unsafePerformIO сам по себе не мешает проблема с bottom-ами