5

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

私を驚かせたのは、これはすでにある種のパターンにカプセル化されるべきもののように思えるということです。

4

2 に答える 2

0

そして、この質問を書いているときに、解決策が思い浮かびました。

maybeEndo :: (a -> Endo b) -> Maybe a -> Endo b
maybeEndo = maybe (Endo id)

つまり、setPotentialProxy は次のようになります。

setPotentialProxy :: Maybe Proxy -> RequestTransformer
setPotentialProxy = maybe (Endo id) setProxy

ただし、このシナリオに対処するさらに自然な方法がある可能性があるため、この質問を投稿することにしました。そして多分それは他の誰かを助けるでしょう。

于 2014-10-25T09:03:22.667 に答える