- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个操作(??)
这样
(a ?? b) ?? c = a ?? (b ?? c)
(??)
是关联的)
liftA2 (??) (liftA2 (??) a b) c = liftA2 (??) a (liftA2 (??) b c)
liftA2 (??)
是关联的)
fmap (??) (fmap (??) a <*> b) <*> c = fmap (??) a <*> (fmap (??) b <*> c)
Maybe
、
[]
、
Either
等)都遵循法律,所以我想我会创建自己的。
data Vacuous a = Vac Alg
Alg
将是一些代数,我稍后会根据自己的方便定义,以使属性失败但应用定律成功。
instance Functor Vacuous where
fmap f = id
instance Applicative Vacuous where
pure x = Vac i
liftA2 f (Vac a) (Vac b) = Vac (comb a b)
(Vac a) <*> (Vac b) = Vac (comb a b)
i
是
Alg
的一些元素待定和
comb
是
Alg
上的二进制组合器也有待确定。我们实际上没有其他方法可以定义这一点。
i
成为
comb
上的一个身份.然后我们得到
同态和
立交 免费。但是现在
作文部队
comb
关联到
Alg
((pure (.) <*> Vac u) <*> Vac v) <*> Vac w = Vac u <*> (Vac v <*> Vac w)
((Vac i <*> Vac u) <*> Vac v) <*> Vac w = Vac u <*> (Vac v <*> Vac w)
(Vac u <*> Vac v) <*> Vac w = Vac u <*> (Vac v <*> Vac w)
(Vac (comb u v)) <*> Vac w = Vac u <*> (Vac (comb v w))
Vac (comb (comb u v) w) = Vac (comb u (comb v w))
comb (comb u v) w = comb u (comb v w)
最佳答案
我们首先使用应用定律重写左侧。回想一下 <$>
和 <*>
是左结合的,所以我们有,例如,x <*> y <*> z = (x <*> y) <*> z
和 x <$> y <*> z = (x <$> y) <*> z
.
(??) <$> ((??) <$> a <*> b) <*> c
= fmap/pure law
pure (??) <*> (pure (??) <*> a <*> b) <*> c
= composition law
pure (.) <*> pure (??) <*> (pure (??) <*> a) <*> b <*> c
= homomorphism law
pure ((.) (??)) <*> (pure (??) <*> a) <*> b <*> c
= composition law
pure (.) <*> pure ((.) (??)) <*> pure (??) <*> a <*> b <*> c
= homomorphism law
pure ((.) ((.) (??)) (??)) <*> a <*> b <*> c
= definition (.)
pure (\x -> (.) (??) ((??) x)) <*> a <*> b <*> c
= definition (.), eta expansion
pure (\x y z -> (??) ((??) x y) z) <*> a <*> b <*> c
= associativity (??)
pure (\x y z -> x ?? y ?? z) <*> a <*> b <*> c
a
。 ,
b
, 和
c
按此顺序,以这种方式排序它们的效果,然后使用
(??)
纯粹结合三个结果。
(??) <$> a <*> ((??) <$> b <*> c)
= fmap/pure law
pure (??) <*> a <*> (pure (??) <*> b <*> c)
= composition law
pure (.) <*> (pure (??) <*> a) <*> (pure (??) <*> b) <*> c
= composition law
pure (.) <*> pure (.) <*> pure (??) <*> a <*> (pure (??) <*> b) <*> c
= homomorphism law
pure ((.) (.) (??)) <*> a <*> (pure (??) <*> b) <*> c
= composition law
pure (.) <*> (pure ((.) (.) (??)) <*> a) <*> pure (??) <*> b <*> c
= composition law
pure (.) <*> pure (.) <*> pure ((.) (.) (??)) <*> a <*> pure (??) <*> b <*> c
= homomorphism law
pure ((.) (.) ((.) (.) (??))) <*> a <*> pure (??) <*> b <*> c
= interchange law
pure ($ (??)) <*> (pure ((.) (.) ((.) (.) (??))) <*> a) <*> b <*> c
= composition law
pure (.) <*> pure ($ (??)) <*> pure ((.) (.) ((.) (.) (??))) <*> a <*> b <*> c
= homomorphism law
pure ((.) ($ (??)) ((.) (.) ((.) (.) (??)))) <*> a <*> b <*> c
((.) ($ (??)) ((.) (.) ((.) (.) (??))))
以更易读的点形式,这样我们就可以使它等于我们在证明的前半部分得到的术语。这只是申请
(.)
的问题和
($)
如所须。
((.) ($ (??)) ((.) (.) ((.) (.) (??))))
= \x -> (.) ($ (??)) ((.) (.) ((.) (.) (??))) x
= \x -> ($ (??)) ((.) (.) ((.) (.) (??)) x)
= \x -> (.) (.) ((.) (.) (??)) x (??)
= \x y -> (.) ((.) (.) (??) x) (??) y
= \x y -> (.) (.) (??) x ((??) y)
= \x y z -> (.) ((??) x) ((??) y) z
= \x y z -> (??) x ((??) y z)
= \x y z -> x ?? y ?? z
(??)
的关联性.
关于haskell - liftA2 是否保留关联性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62036972/
这个问题已经有答案了: Why does the expression a = a + b - ( b = a ) give a sequence point warning in c++? (4 个
有人可以解释以下代码片段的输出行为吗? function Vertex(x, y, z) { this.x = parseInt(x); this.y = parseInt(y);
理论上的输入/输出流运算符关联性: 从左到右 (例如,根据这个:Sait Mary's University website 输入/输出流运算符关联性实践: #include int func0()
根据 Hoogle,>= (bar <=< baz) 无积分,它给了我 bar <=< baz =<< foo 考虑到固定性,这看起来不太正确。 最佳答案 Frege 就像 Haskell,但 Fre
我正在使用任务集工具为我的一个程序设置 CPU 关联性。如何仅在单个 CPU 上设置亲和性 - 因为我对此不确定,所以我这样做: taskset -c 2-2 tests/prog 1 2 3 ...
我搜索了有关 CPU 亲和性的问题/答案并阅读了结果,但我仍然无法让我的线程锁定单个 CPU。 我正在开发一个将在专用 Linux 机器上运行的应用程序,因此我不关心其他进程,只关心我自己的进程。该应
我想知道linux进程是否可以使用默认的亲和性。默认值是 ~0(截断为可用 CPU 的数量),但我希望能够为系统的所有进程设置它。在启动时执行此操作也很好,这样我就可以有效地防止任何进程使用某些 CP
在 C99 标准中,表达式允许优先级和关联性。 优先级被很好地记录下来,因为文档中运算符出现的顺序是降低优先级的,所以函数调用在乘法运算符之前,而乘法运算符又在加法运算符之前。 但是,我找不到关于结合
我想将应用程序设置“ARR Affinity”配置为在通过我们的 ARM 模板配置新的应用程序服务时关闭。我该怎么做? 我找不到任何关于此的信息,这表明目前尚不支持它。 最佳答案 您正在 Micros
我想指定特定 pthread 的 CPU 亲和性。到目前为止我找到的所有引用资料都涉及设置进程(pid_t)而不是线程(pthread_t)的CPU亲和性。我尝试了一些传递 pthread_t 的实验
我在具有 2 个实例的云服务中拥有一个 Web 角色。 我有一个函数在一个实例中创建文件并切换到另一个中间函数,导致 404 错误,因为它找不到文件。 在 Azure Web Apps 中,Azure
F# pipe-forward 可以表示为: let (|>) x f = f x 例如: let SimpleFunction (a : typeA) (b : typeB) (c : typeC)
我有一个 HTTPS 负载均衡器,配置了一个后端服务和 3 个实例组: 端点协议(protocol):HTTPS 命名端口:https 超时:600 秒 运行状况检查:ui-health2 sessi
这个问题已经有答案了: Java thread affinity (5 个回答) 已关闭 6 年前。 有一些第三方库出于许可目的检查 CPU 数量,但没有明显的方式告诉他们“使用 1 个核心”。 为了
我们正在 Heroku 中基于 NodeJS 和 Websockets (MeteorJS) 运行生产操作几个月,使用配置为 session affinity 的 3 个实例。 。现在,我们想要从 H
我是一名优秀的程序员,十分优秀!