我正在深入研究 Haskell一書,我注意到以下代碼示例:
withReader :: (r' -> r) -> Reader r a -> Reader r' a
這看起來像contramap。Control.Monad.Reader和之間有什么關系Data.Functor.Contravariant?
uj5u.com熱心網友回復:
Reader的型別引數的順序不正確contramap。一個Contravariant仿函式總是需要在其最后的型別引數逆變,但Reader在它的第一個型別引數逆變。但是你可以這樣做:
newtype FlippedReader a r = FlippedReader (Reader r a)
instance Contravariant (FlippedReader a) where
contramap f (FlippedReader x) = FlippedReader (withReader f x)
Reader也幾乎是Profunctor, with lmap = withReaderand rmap = fmap,但這并不完全有效,因為Reader r a它實際上是 for 的型別同義詞ReaderT r Identity a(盡管您可以使用另一個newtype包裝器使其像我上面那樣作業)。并且(->)實際上是Profunctor具有等效行為的,并且與Reader.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347703.html
上一篇:我必須在代碼中更改什么才能作業?
