首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MonadBaseControl定律

MonadBaseControl定律
EN

Stack Overflow用户
提问于 2019-09-25 19:58:17
回答 1查看 181关注 0票数 16

班级提供的法律很少。要想得到我想要的东西,我还需要一个:

代码语言:javascript
复制
forall f q. f <$> liftBaseWith q
  = liftBaseWith $ \runInBase -> fmap f (q runInBase)

我极其模糊的直觉表明,这是自然的(在某种意义上),它甚至可能来自Functor定律、参数性和文档化的MonadBaseControl定律的某些组合。是这样吗?如果没有,是否有任何违反法律的“合理”事例?

注意:我还问了这个问题的简写版本作为一个GitHub问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 21:34:22

这是liftBaseWith型自由定理的直接结果。

“自由定理”的一个简化版本足以产生这样一个自由定理的版本:

任何函数f :: forall a. F a -> G a,其中FG是函子,对于任何类型的ab和任何函数phi :: a -> b,都满足,

代码语言:javascript
复制
fmap phi . f = f . fmap phi  -- simplified "free theorem" for f

(换句话说,这个公式在任何时候都适用。)

我没有现成的证据,但如果有反例,我会感到非常惊讶的。

应用程序

在本例中,fliftBaseWith,其中函子是

代码语言:javascript
复制
F a = RunInBase m b -> b a  -- F = ReaderT (RunInBase m b) b
G a = m a

将上述“自由定理”的两面应用于q,给出了ReaderTfmap定义。

代码语言:javascript
复制
(fmap phi . liftBaseWith) q = (liftBaseWith . fmap phi) q
fmap phi (liftBaseWith q) = liftBaseWith (fmap phi q)
fmap phi (liftBaseWith q) = liftBaseWith \run -> fmap phi (q run)

相关文献

作为阅读这个话题的起点,当然还有免费的论文“定理”!作者菲利普·瓦德勒( Philip ),另一位与詹尼斯·沃格兰德( Janis )密切相关的人( https://www.janis-voigtlaender.eu/papers/FreeTheoremsInvolvingTypeConstructorClasses.pdf )。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58105759

复制
相关文章

相似问题

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