В Haskell, если я хочу повторно применить эндоморфизм a → a
к значению типа a
я могу просто использовать iterate
.
Как насчет функции, которая не является эндоморфизмом, но достаточно общего для правильной работы над возвращаемым типом?
Рассмотрим, например Just :: a → Maybe a
; я могу написать
Just . Just . Just ...
столько раз, сколько я хочу. Есть ли способ написать это в ближайшее время с чем-то вроде
iterate' 3 Just :: a -> Maybe (Maybe (Maybe a))
или нам нужно что-то вроде зависимых типов для этого?