首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找双重的ReaderT,它在环境上抽象,而不是一元结果

寻找双重的ReaderT,它在环境上抽象,而不是一元结果
EN

Stack Overflow用户
提问于 2015-08-09 13:52:33
回答 1查看 100关注 0票数 8

下面的带有ContravariantDivisible等实例的抽象是否已经在某些包中实现了?我暗示了以下可编译代码的精神:

代码语言:javascript
复制
newtype ReaderDual a m b =
  ReaderDual (b -> m a)

instance Contravariant (ReaderDual a m) where
  contramap ba (ReaderDual a') =
    ReaderDual $ a' . ba

instance (Applicative m, Monoid a) => Divisible (ReaderDual a m) where
  divide aToBC (ReaderDual b') (ReaderDual c') =
    ReaderDual $ \a -> aToBC a & \(b, c) -> (<>) <$> b' b <*> c' c
  conquer =
    ReaderDual $ \_ -> pure mempty

run :: ReaderDual a m b -> b -> m a
run (ReaderDual a') b =
  a' b
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 16:40:45

您可以将此类型构建为来自contravariantcontravariant和来自reducersAp的组合。Op a b只是b -> a,并且为任何Monoid a都有一个Divisible实例。

要获取实例的行为,我们可以使用Ap m a,它为任何Applicative mMonoid a提供带有mappend = liftA2 (<>)mempty = pure memptyMonoid

代码语言:javascript
复制
type ReaderDual a m b = Op (Ap m a) b
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31904974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档