Я только что обнаружил тип Endo благодаря network-api-support package, и я обнаружил, что необходимо иметь возможность добавлять значения Maybe в Endo. В результате я написал функцию с именем mayEndo. Вот пример его использования:
setProxy :: Proxy -> RequestTransformer
setProxy (Proxy pHost pPort) = Endo $ addProxy pHost pPort
maybeEndo :: (a -> Endo b) -> Maybe a -> Endo b
maybeEndo _ Nothing = Endo id
maybeEndo f (Just v) = f v
setPotentialProxy :: Maybe Proxy -> RequestTransformer
setPotentialProxy = maybeEndo setProxy
Что меня поражает, так это то, что это похоже на то, что уже должно быть заключено в какой-то шаблон.