Alexander
Кстати, разные авторы пишут, что, мол, не делайте таких "псевдомонад", потому что у вас будут проблемы. Но, кажется, это все общие слова, и еще никто не исследовал, какие именно проблемы могут возникнуть. Даже интересно.
A64m
такие же как у плавучки
A64m
они там тоже из-за того что ассоциативность не соблюдается
Alexander
Плавучки?
Alexander
по "определению" (не знаю, насколько оно официальное, но мне оно очень понравилось, когда я его понял) монады как моноида на категории эндофункторов
Что есть моноид? Моноид это тройка из множества M, операции *: M * M -> M (ассоциативной), нейтрального элемента e: 1 -> M
Категория эндофункторов - категория, где объекты - функторы C -> C, где C - некая категория
получается, моноид на категории эндофункторов - тройка из эндофунктора M (в хаскеле это просто функтор, потому что там все функторы - эндофункторы), естественного преобразования M * M ~> M (если выйти из категории эндофункторов, то это join : M (M a) -> M a, и нейтарльного элемента 1 ~> M, в нашей категории это return : a -> M a (1 это Identity-функтор, Identity a = a, поэтому я его опустил тут)
~> - естественное преобразование, морфизм в категории функторов,
f ~> g = forall a. f a -> g a
Спасибо
A64m
чисел с плавающей точкой
Alexander
А, окей
Anonymous
монады в картинках:
https://m.habrahabr.ru/post/183150/
Andrew
👍
Влод
а можно как-нибудь квикчеку (с hspec) сказать что мол погоняй ка разные рандомы через функцию и мне всё равно какой выхлоп лишь бы не падало?
это наверное идеологически не ок
Aleksey
👍
я зашел на blizko.ru и получил вот это
Aleksey
у вас явно не хватает хаскеля
Влод
оо кул. живёт идея лейбница
Alexander
Вот уже года три я рассказываю плюсовикам Хаскель, обернутый в плюсы. Меня очень радует, что концепции, существующие в мире ФП уже десяток лет (а то и два), вызывают такое неподдельное удивление.
Cheese
Влод
без эксепшенов, ну там исполнялась за конечное время
Cheese
λ> quickCheck $ \x y -> x `div` y `seq` ()
*** Failed! Exception: 'divide by zero' (after 1 test):
0
0
λ> quickCheck $ \x y -> x / y `seq` ()
+++ OK, passed 100 tests.
Cheese
время жизни твоего компьютера практически конечно. всё, что на нём работает, работает конечное время
Cheese
можно таймаут какой-нибудь придумать
Влод
мм ну ок.
а тем не менее не кажется, что это как-то неправильно?
просто такая фигня: есть падающая функция. и есть функция которая нормализует входные данные чтобы тип не падало 100%
Влод
не, таймаут лишнее.
Cheese
звучит туманно
Dmitry
Что бы как-то упорядочить наши вакансии, буду постить их сюда: https://t.me/hxr_haskell_job и туда же новости (например, про митапы, где можно будет лично пообщаться при желании )
Kirill
@qnikst оффтоп?
kosc
Или спам?
Mikhail
>канал о том как стать программистом даже если вы до этого не написали ни одной строчки кода
Весьма странно рекламировать такой посыл на канале о Haskell
Cheese
спам, очевидно
Cheese
Влод
ахах
Cheese
точнее, что ты ожидаешь получить
Влод
ну тип например функция (1 /) - очевидно крешится при некоторых значениях
а другая функци заменяет 0 на 1, тк решено что это ок
Влод
да слово неудачное
Влод
доопределяет
Oleg
Если я правильно помню, одна из них для интежеров, другая для фракшнолов
Oleg
И это в этом случае две разных функции
Влод
это был пример
Влод
хорошо
функция принимает корректный xml и кидает эксепшон при некоторектном
Oleg
и что это нам демонстрирует?
Влод
вторая функция берёт некоректный и удаляет некоректные теги
Влод
да чёрт знает - меня попросили пояснить что я имел ввиду
Cheese
но получается функция, выдающая какую-то фигню
Cheese
ты смотришь на выход, видишь 42, думаешь, как здорово, а на самом деле там не может быть 42
Cheese
приборы! 120!
Cheese
а главное, зачем?
Max
Философские беседы с утра...)
Влод
Mikhail
а теперь типа хочешь интеграционное навернуть?
Влод
Типа да. Ну мб так себе идея генерить всё подряд квикчеком
Mikhail
мне кажется, квикчеком надо именно свойства тестировать, а не заменять им полностью все
Mikhail
если ты знаешь конкретные крайние случаи, которые хочешь обработать, то их надо бы вручную перечилслить, не лениться
Влод
свойства тоже можно одним тестом описать
Влод
рандомизация там как бы особо ни к чему
Влод
так уверенности добавляет
Alexander
@vlastachu catchAll
Влод
а ну это немного другой способ решить проблему
Cheese
а, наоборот? не выходы подмухлевать, а некорректные входы почистить?
Влод
как бы нужно хотя бы частично ок распарсить
Aleksei (astynax)
Если это XML, то можно событийным парсером разбирать
Aleksei (astynax)
SAX или типа того
Aleksei (astynax)
Тогда частично разберется хоть что-то
Cheese
не, если хотя бы частично распарсить, то более правильно внутри парсера коррекцию делать, исходя из семантики, как в HTML или разных языках программирования
Cheese
на всякий случай. речь ведь не о разборе HTML средствами XML?
Alexander
Это, кстати, важная задача в контексте всяких редакторов кода.
Влод
ладно, раз вам хочется вникать в мои проблемы: речь о html, средствами тупого токенайзера (там всё ок) и далее передаётся в мою функцию некоторые случаи в которой должны быть недостижимы. ну то есть первым проходом после токенайзера я дополняю незакрытые теги и убираю лишние закрывающие
браузер это кстати делает весьма неоднозначно в зависимости от того какой это тег, и спецификации на этот счёт или просто статеек я не нашёл
Cheese
некоторые рекомендации по исправлению HTML есть в самом стандарте
Влод
https://www.w3.org/TR/html52/introduction.html#syntax-errors
Влод
наверное вот это имеешь ввиду
Влод
выглядит как-то слабенько
Cheese
вообще, эта задаче уже решена пятьсот раз, в каждом браузере и библиотеках типа beautiful soup
Влод
да
Cheese
я же сказал "некоторые"
Влод
скорей всего везде по-разному
Cheese
ты пишешь свой пятьсот первый beautiful soup?
Влод
ага
Cheese
ну, успехов
Влод
👍
Cheese
в общем, я бы это делал без QuickCheck, без ловли исключений, но с учётом семантики