Ответ на этот вопрос предполагает, что метод сворачивания в Option в Scala это катамопризм. Из википедии катамофизм - это «уникальный гомоморфизм исходной алгебры в некоторую другую алгебру. концепция была применена к функциональному программированию как складки ». Это кажется справедливым, но приводит меня к начальной алгебре в качестве исходного объекта в категории F-алгебры.
Итак, если складка на Option действительно является катамофизмом, необходим некоторый функтор F, чтобы создать категорию F-алгебр, где Option будет исходным объектом. Я не могу понять, что это за функтор.
Для списков типа A
функтором F
является F[X] = 1 + A * X
. Это имеет смысл, потому что List является рекурсивным типом данных, поэтому, если X
равно List[A]
, то выше указано, что список типа A
является либо пустым списком (1
), либо (+
) парой (*
) A
и List[A]
. Но Option не рекурсивен. Option[A]
будет просто 1 + A
(Ничего или A
). Так что я не понимаю, где находится функтор.
Чтобы быть ясным, я понимаю, что Option уже является функтором, поскольку он принимает от A
до Option[A]
, но то, что делается для списков, отличается, A
фиксирован, а функтор используется для описания того, как рекурсивно конструировать тип данных.
Кстати, если это не катаморфизм, его, вероятно, не следует называть складкой, поскольку это приводит к некоторому путаница.
F
должен быть рекурсивным? Многие алгебраические типы данных - нет. В любом случае всегда можно было схитрить и написать что-нибудь вродеF[X] = 1 + Const A X
. - person Travis Brown   schedule 18.05.2014F[X] = 1 + Const A X
то же самое, что и функтор, какF[X] = 1 + A
? (Функтор, который отправляет каждый тип в Option [A].) Я полагаю, что это работает, но настолько тривиально, что я предполагал, что будет происходить еще больше. При этом F любая F-алгебра - это просто тип B с отображением из варианта [A] в B. Тогда начальность просто говорит, что для типа B и отображения из варианта [A] в B существует уникальное отображение от варианта [A] к B. домашние страницы. inf.ed.ac.uk/wadler/papers/free-rectypes/ (ссылка на википедию) также подразумевает, что точка исходных F-алгебр предназначена для рекурсивных типов данных. - person Patrick   schedule 18.05.2014T
вы можете рассматривать функторF[X] = T
. Тогда F-алгебра - это просто типB
вместе с картойg
отT
доB
.T
- это непосредственно исходная алгебра, а катамофизм просто применяетg
к объектам типаT
. Кажется, именно это и происходит, поскольку вариант [A] является копродуктомA
иNothing
, а карта отOption[A]
доB
разделяется на карту отA
доB
и карту отNothing
до B, которая соответствует сигнатуре типаfold
поOption
. - person Patrick   schedule 19.05.2014