network-api-supportパッケージのおかげで Endo タイプを発見したばかりで、Maybe 値を Endo タイプにスローできるようにする必要があることがわかりました。その結果、maybeEndo という関数を作成しました。使用例を次に示します。
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
私を驚かせたのは、これはすでにある種のパターンにカプセル化されるべきもののように思えるということです。