User: Привет, я бы хотел услышать шутку про Haskell.
Haskell: Ок. Почему курица переходит дорогу?
User: Не знаю. Почему?
Haskell: Это на самом деле очень просто. Лучший способ понять это исходит из идеи контравариантного функтора. Как вы возможно знаете, функтор это всего лишь отображение из одной категории в другую с сохранением структуры категории; гомоморфизм между категориями, если хотите. Теперь, некоторые конструкции, которые мы хотим выразить, выглядят как функторы но в некотором смысле "поворачивают морфизмы наоборот". Мы называем это контравариантыми функторами. Как вы возможно заметили, мы безусловно можем определить контравариантный функтор как просто ковариантный функтор из двойственной категории, если ссылаться на очевидное соответствие. Конечно, вы уже заметили очевидную связь, которую это имеет с обобщением топологических предпучков теории категорий — предпучок на категории это всего лишь контравариантный функтор из частично упорядоченного множества открытых множеств в категорию множеств. Теперь, становится очевидно, что...