кана
Хм, могу ошибаться, но функторы можно выразить через категорию всех категорий Cat. Морфизмы в такой категории будут функторами. Если перемножить такую категорию саму с собой, то получаем бифунктор в виде морфизма. Эта категория в степени n порождает мультифунктор как морфизм. У OpCat * Cat морфизмом будут профункторы
Michel
Dmitrii
Dmitrii
Отличные стикеры)
Sergey
Обзоры книжек по Haskell https://medium.com/@_bravit/%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-%D0%BF%D0%BE-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BD%D0%B0-haskell-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D1%8B-712c1f5b7749
кана
Почему?
кана
Насколько я знаю, в теоркате праймари термин именно морфизм, а стрелка - синоним
кана
речь же не про "функция/отображение"
Viacheslav
Наоборот
Viacheslav
Морфизм это синоним и не всегда точный
Viacheslav
https://ncatlab.org/nlab/show/morphism
a66ath
Функтором и в более простую структуру поднять можно
a66ath
:)
Donat
а кто-нибудь читал Maybe Haskell?
Ilya
Насколько я слышал, аксиоматически теоркат строится именно на абстрактных стрелках. Даже отдельное понятие объектов не нужно
Viacheslav
Ну и вообще, определять тайпклассы в хаскеле через аналогичные понятия в теоркате — это ни в коем случае не точные определения, потому что это всё-таки абстрактные понятия, которые имплементированы в конкретном языке, конкретным образом
Viacheslav
Поэтому прикольно конечно понимать что такое функтор в теоркате и знать его определение: но это не сильно полезно при начальном понимании, это ни разу не точное определение функтора в хаскелле
Evgeniy
Evgeniy
это ведь нат. трансформация между функторами там или я, что то не понял?
Evgeniy
что тут функторы?
Cheese
в категории монад (точнее, просто морфизмов типов) как объектов и морфизмов морфизмов типов (например, монадных трансформеров) как стрелок
Cheese
о функторах в этой категории лучше пока не думать
Cheese
ТК-функторы — они вообще не в категории, а между категориями
Cheese
так что здесь их нет
Evgeniy
> так что здесь их нет да это понятно не понятно по чему эта стрелка есть морфизм между монадами
Cheese
объекты этой категории — эндофункторы в категории (Type, ->)
Evgeniy
я понял что определение стрелки в этой категории оно вот ближе к монадному трансформеру
Cheese
> так что здесь их нет да это понятно не понятно по чему эта стрелка есть морфизм между монадами
это более широкая штука, в том числе это и морфизм между монадами, потому что монада — это частный случай морфизма типов
Cheese
монадный трансформер — частный случай
Evgeniy
а тк трансформер он тоже type->type то это может быть так заэнкоженно?
Cheese
тут скорее функторный трансформер
Evgeniy
мы же пытаемся это все в Hask изобразить, по этому вот и получается что в конечном счете у навсе все морфизмы тут type->type
Evgeniy
у меня конечно после того как вышли за рамки Hask мозг сломался
Evgeniy
> потому что монада — это частный случай морфизма типов
Evgeniy
а вот это мне прояснило картину
Evgeniy
спасибо
Cheese
или как это правильно называется?
Cheese
монада (хаскелльная) m является стрелкой из а в m a, но её тип Type -> Type является стрелкой из Type в себя
Cheese
для сорта Type -> Type нельзя написать instance Category, но можно для (~>), который ему изоморфен (впрочем, я не уверен, что действительно изоморфен)
кана
Не могу понять, почему кайнд переводят как сорт. Ну напрашивается же "вид". Функция вида..., тип вида...
Евгений
Давайте переводить "порода"
Влод
добро
кана
Я предпочитаю старое русское слово кайнд
Cheese
кайнд — это же тип₂? или тип₁?
Влод
Тогда там наверное есть тип0
Cheese
кайнды — термы2, типы — термы1, значения — термы0
Vladislav
Нельзя сказать, что типы — это тёрмы_1
Vladislav
Эта иерархия (тип0, тип1, тип2) не затрагивает термы
Cheese
уровни термов я скопировал с изменениями из https://www.cs.cmu.edu/~kw/scans/hurkens95tlca.pdf, возможно, направильно
Vladislav
Я не исключаю, что такая формальная система возможна (пейпер не читал и сейчас не хочется), просто это не то, что делают proof assistants сегодняшние.
Cheese
а что делают сегодняшние?
Cheese
кажется, я где-то читал про бесконечный ряд Type_n :: Type_{n+1}, и как TypeInType отождествляет их все, но сейчас не могу найти
Vladislav
так и есть, просто это не с тёрмов начинается
Vladislav
имеем тёрмы, а потом тип0, тип1, тип2, тип3, etc
Vladislav
с type-in-type имеем тёрмы, потом типы (зацикленные в себя)
Зигохистоморфный
а тут все рекурсивные схемы обсуждают)
Bohdan
ghc умеет кросс-компиляцию под винду?
Влод
ghc умеет кросс-компиляцию под винду?
вот кстати интересный вопрос. правда после студенчества ни разу таким не интересовался: всегда найдутся машины с целевой платформой
Aragaer
-C Stop after generating C (.hc file)
Aragaer
дальше берется нужный кросс-компилятор С
Aragaer
и семейство флагов -pgm*
Cheese
а в какой момент кабал будет вычислять "if win32"?
Leonid 🦇
без кабала, ghc -make и вперде
Alexandr
Всем привет! Как можно создать инстанс для тайпкласса/тайпклассов? Что-то вроде class Foo a where bar :: a -> Bool instance (Ord a, Num a) => Foo a where bar n = n > 10
Kirill
А что должно помешать?
Aleksei (astynax)
Будет ругать на ограничение в инстансе, которого (ограничения) нет в классе
Oleg
Полагаю, такой конкретно инстанс корректен только если нет ни одного другого
Kirill
моноиды же так объявлены
Aleksei (astynax)
Там ограничение - тоже Моноид
Aleksei (astynax)
Это как раз логично
Alexandr
для этого будет ошибка error: • Illegal instance declaration for 'Foo a' (All instance types must be of the form (T a1 ... an) where a1 ... an are *distinct type variables*, and each type variable appears at most once in the instance head. Use FlexibleInstances if you want to disable this.) • In the instance declaration for 'Foo a'