Size: a a a

Теория категорий

2018 February 28

VY

Vasiliy Yorkin in Теория категорий
Oleg Prutz
foldl`/`foldr - это катаморфизм для [] - как это понять?
что здесь f?
что здесь Fix f? наверное []
что здесь алгебра? f a -> a
что здесь f?
[]

что здесь Fix f?
newtype Fix f = Fix (f (Fix f))
я думаю справедливо, что можно представлять себе это как:
data []' a = []'' | a : ([]' a)
type [] a = Fix ([]' a)
шртихи делают все не понятным :(
т.е. аналогично List:
data L t r = Nil | Cons t r
type List t = Fix (L t)


что здесь алгебра? f a -> a
type Algebra f a = f a -> a грубо говоря
[a] -> a
~ можно представлять себе в терминах f a этот сахар в виде:
([] a) -> a
источник

OP

Oleg Prutz in Теория категорий
у f должен быть применён уже один параметр, у [] ничего такого нет
источник

Oℕ

Oleg ℕizhnik in Теория категорий
Oleg Prutz
у f должен быть применён уже один параметр, у [] ничего такого нет
есть
источник

к

кана in Теория категорий
Oleg Prutz
у f должен быть применён уже один параметр, у [] ничего такого нет
[] :: * -> *
[] a = [a]
[] a :: *
[a] :: *
источник

OP

Oleg Prutz in Теория категорий
короче
есть функция unFix :: Fix f -> f (Fix f)
значение какого типа она вернёт для аргумента типа [a]?
источник

к

кана in Теория категорий
unFix - не совсем функция, это поле из Fix, тип которого - функция
newtype Fix f =
 Fix { unFix :: f (Fix f) }

Не имея явно собранного Fix-значения ты и значение не достанешь
источник

к

кана in Теория категорий
Я ведь кинул выше пример для списка и его алгебры с катой
источник

OP

Oleg Prutz in Теория категорий
кана
unFix - не совсем функция, это поле из Fix, тип которого - функция
newtype Fix f =
 Fix { unFix :: f (Fix f) }

Не имея явно собранного Fix-значения ты и значение не достанешь
тут @odomontois говорил, что значение достаётся при матчинге (именно для `[]`)
источник

к

кана in Теория категорий
Это абстрактное утверждение, основанное на изоморфизме
[a] И Fix (ListF a)
источник

OP

Oleg Prutz in Теория категорий
т.е. без изоморфизмов [] и cata несовместимы?
источник

Oℕ

Oleg ℕizhnik in Теория категорий
дай определения cata и [], о которых ты говоришь
источник

Oℕ

Oleg ℕizhnik in Теория категорий
кана рассказывает тебе о recursion-schemes
источник

VY

Vasiliy Yorkin in Теория категорий
лучшее, что я читал про схемы: http://blog.sumtypeofway.com/recursion-schemes-part-2/
там целая серия
источник

OP

Oleg Prutz in Теория категорий
Oleg ℕizhnik
дай определения cata и [], о которых ты говоришь
[] из prelude, cata и Fix отсюда https://bartoszmilewski.com/2017/02/28/f-algebras/
источник

Oℕ

Oleg ℕizhnik in Теория категорий
сильно ли токсично будет бросать сюда твит Брагилевского о категорном толковании хаскеля?
источник

OP

Oleg Prutz in Теория категорий
думаю что сильно
некоторые вещи берутся напрямую из категорий, а некоторые нет
источник

Oℕ

Oleg ℕizhnik in Теория категорий
в общем, да, в чистом виде несоместимы.
Вв той статье, что ты кинул мы должны представить список как Fix. Для этого в нашумевшей библиотеке от другого популярного категорного блогера есть тип классов Recursive, который восстанавливает морфизм (не изо-, в одну сторону - достаточный для cata) из типа в фикспойнт
источник

Oℕ

Oleg ℕizhnik in Теория категорий
Если не воображать, что [a] изоморфно Fix (ListF a) вот тем катаморфизмом ты не можешь воспользоваться
источник

Oℕ

Oleg ℕizhnik in Теория категорий
мало того, всё это довольно явно описано по ссылке
источник

VY

Vasiliy Yorkin in Теория категорий
прикольно:

instance Recursive [a] where
 project (x:xs) = Cons x xs
 project [] = Nil

 para f (x:xs) = f (Cons x (xs, para f xs))
 para f [] = f Nil

instance Corecursive [a] where
 embed (Cons x xs) = x:xs
 embed Nil = []

 apo f a = case f a of
   Cons x (Left xs) -> x : xs
   Cons x (Right b) -> x : apo f b
   Nil -> []
источник