Alexander
что значит сабсет
Alexander
обычно это то, что ты будешь сам реализовывать 90% или 85% хотелок будет не реализуемо
Viacheslav
Привет, возник такой вопрос, от человека (меня), который ничего серьезного в продакшен на чистых функциональных языках не писал.
Viacheslav
Правда, что самый хороший способ асбтрагировать способ оганизации данных от их получения/обновления — это тайпклассы
Viacheslav
или есть что-то лучше?
Dmitry
критерии хорошести хорошо бы озвучить
Viacheslav
я готов слушать про все возможные способы, которые приходят в голову
Viacheslav
Моя главная задача, это просто абстрагировать работу с данными от способа (структуры) хранения этих данных
Dmitry
тайпклассы норм
Misha
можно и просто data D { save :: k -> v -> IO(), load :: k -> IO t } использовать, без тайпклассов, там правда потеряются какие-то compile-time гарантии, но тоже нормально
Vasiliy
поговаривают, что если у тайпклассов нет законов, то проще использовать рекорды с методами
Leonid 🦇
Это городская легенда
Warren
Я бы почитал аргументации сторон по поводу беззаконных тайпклассов. От Кметта неоднократно слышал что ТП без законов это антипаттерн
Ilya
#spam
Dmitry
лучше так: @voidlizard @qnikst #spam
Dmitry
Что касается кметта и законов - ну что, плохо теперь математику в мирке, куда повалили беззаконные программисты. Не успели сделать окамловских функторов - не нойте теперь, что тайпклассы и тайпфэмилис как-то не так используются.
Anonymous
у меня теоретический вопрос: есть законы аппликативов типа pure id <*> M == M, с точки зрения лямбда-исчисления - это бета-эта эквивалентность между термами?
Oleg
Зигохистоморфный
Dmitry
с ними всё так. но мы их пытаемся использовать ocaml-way что 1) непросто 2) порицается
Зигохистоморфный
вон Кметт же придумал как обобщить Fix https://github.com/ekmett/recursion-schemes/blob/master/Data/Functor/Foldable.hs#L145
Dmitry
что-то я боюсь Кметта, по моему он против того, что бы всякие посторонние писали на его хаскелле
Max
И это правильно. Технофашизм не дремлет.
Dmitry
это уже техно-ваффен-сс
Dmitry
я по моему даже бумаги Олега понимаю лучше, чем Кметта.
Dmitry
ну, некоторые, ладно
Dmitry
не буду утверждать, что я там дофига чего у Олега понимаю
Зигохистоморфный
все эти морфизмы замены всех рекурсий корекурсий какие существуют да и есть вещи когда на морфизмах с алгебрами более очевидно пишешь
Anonymous
https://twitter.com/snoyberg/status/885773644521230336
Aλexander
Ребята, вы не в курсе, есть ли хорошие (желательно русскоязычные) подкасты о Хаскелле?
Anonymous
Бананы и линзы и так знаете, наверняка.
Arseniy
Человек же попросил хорошие.
Anonymous
Ой, всё.
Leonid 🦇
/me отметил в чёрном журнальчике
Anonymous
/me
Anonymous
ой, я случайно
Anonymous
Курс Москвина на степике
Anonymous
Ребята, вы не в курсе, есть ли хорошие (желательно русскоязычные) подкасты о Хаскелле?
Anonymous
1 часть
Мерль
Aλexander
Спасибо всем, послушаю
Aλexander
Andrew
Собственно из его лекций понял что применение функции к аргументу - операция, а отсюда стал понятен смысл оператора $
Bohdan
Зачем это условие? Разве может быть иной случай? Наличие тождественного морфизма же исходит из аксиомы
Andrei
??
Andrei
В смысле.
Andrei
Как наличие тождественного морфизма говорит что-то о существовании g ?
Евгений
???
Andrei
В определении утверждается существование g.
Евгений
Ага
Евгений
f:A->B изоморфизм, если существует g: B->A, т.ч. f*g = id_A и g*f = id_B. Если на множествах брать, то это тоже самое, что:
g(f(a)) = a
и f(g(b)) = b
Bohdan
Bohdan
Они могут не выполняться?
Bohdan
Если есть f:A->B и g:B->A
Евгений
А с чего бы им выполняться?
Евгений
Например A, B натуральные, а f(n) = n+1, то если взять
g(n) = n-1, n>1
g(1) = 1
то g(f(n)) = n, но:
f(g(n)) = n, n > 1
f(g(1)) = 2
g лучше ты не найдёшь, потому в 1 f ничего не отображает
Anonymous
f a = a `mod` 2
Не изоморфизм, именно потому, что у тебя нет g. Изоморфизм - это отображение 1-1, например show (derived) и read (derived).
Semion
Ну, говоря проще, в категории множеств, например, изоморфизм - это биективное отображение
Anonymous
Короче: изоморфизм - это обратимое преобразование.
Semion
Обратимое слева и справа
Bohdan
А, то есть просто не любой морфизм A->A является id_A?
Anonymous
Любой. При чём здесь это? Не для любого f :: A -> B существует g :: B -> A, такое что f . g === id . Те пары f, g которые обладают этим свойством и называются изоморфизмом.
Anonymous
(Ну, кроме очевидного f = error "foo")
Semion
Конечно!
Semion
Например, пусть В подмножество в А, рассмотрим включение В в А, и построим расширение этого включения на всё А( если а из А принадлежит А, но не принадлежит В, то ø, если а принадлежит В, то равно а) это морфизм из А в А, но он не тождественный, конечно же.
Bohdan
А, тогда условие действительно нужно, спасибо всем!
Semion
Anonymous
> Только 1 из морфизмов А -> A
Как будто их там бесчётное множество :)
Если не всякие _|_, он там был бы один.
Vladislav
Евгений
Vladislav
в математическом смысле, по крайней мере
Евгений
Например в Set только над пустым и одноэлементным множеством одна стрелка. Между остальными конечными множествами -- количество стрелок конечно, но больше единицы.
Количество стрелок из N в N уже континууально
Vasiliy
не, то, что морфизмов A->A может быть сколько угодно - это понятно, но как может быть много id?
Vasiliy
есть возможность различать их?
Vasiliy
гм, впрочем, и (<> mempty) = id, и (mempty <>) = id