AT
Size: a a a
AT
ХГ
applyOptional' :: Optional (a -> b) -> Optional a -> Optional b
applyOptional' (Full f) (Full x) = Full (f x)
applyOptional' _ _ = Empty
ХГ
JC
ХГ
applyOptional' :: Optional (a -> b) -> Optional a -> Optional b
applyOptional' (Full f) (Full x) = Full (f x)
applyOptional' _ _ = Empty
ХГ
applyOptional :: Optional (a -> b) -> Optional a -> Optional b
applyOptional f a = bindOptional (\f' -> mapOptional f' a) f
ХГ
bindOptional :: (a -> Optional b) -> Optional a -> Optional b
bindOptional _ Empty = Empty
bindOptional f (Full x) = f x
AT
ХГ
Следовательно, applyOptional это bindOptional с трансформацией функции (a -> Optional b) в Optional (a -> b), а это mapOptionalВот это разверните чуть подробнее...
ХГ
AT
ХГ
LO
DF
LO
DF
DF
LO
DF