- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景语境:
从数学上讲,我可以看到需要关联性以保持简单而不依赖顺序。我遇到的示例 monad 的所有实现(博客、书籍等)似乎总是有效。似乎只是简单地使用 map, flatMap
(Scala) 或 fmap, >>=
(Haskell) 就可以使事情成为一个有效的 monad。
据我所知,这并不完全正确,但无法通过失败案例提出一个反例来说明法律的“必要性”。
Wadler's paper提到了不正确实现的可能性:
Haskell Wiki提到以下内容:
The third law is a kind of associativity law for
>>=
. Obeying the three laws ensures that the semantics of the do-notation using the monad will be consistent.Any type constructor with return and bind operators that satisfy the three monad laws is a monad. In Haskell, the compiler does not check that the laws hold for every instance of the Monad class. It is up to the programmer to ensure that any Monad instance they create satisfies the monad laws.
问题:
do
符号有何影响?最佳答案
这是一个结合性失败的非 monad 示例:
{-# LANGUAGE DeriveFunctor #-}
import Control.Monad
newtype ListIO a = L { runListIO :: IO [a] }
deriving Functor
instance Applicative ListIO where
pure x = L $ return [x]
(<*>) = ap
instance Monad ListIO where
(L m) >>= f = L $ do
xs <- m
concat <$> mapM (runListIO . f) xs
如果满足结合性,这两个 do
block 将是等价的
act1 :: ListIO Int
act1 = do
L (pure [1,2,3])
do L (putStr "a" >> return [10])
L (putStr "b" >> return [7])
act2 :: ListIO Int
act2 = do
do L (pure [1,2,3])
L (putStr "a" >> return [10])
L (putStr "b" >> return [7])
但是,运行操作会产生不同的输出:
main :: IO ()
main = do
runListIO act1 -- ababab
putStrLn ""
runListIO act2 -- aaabbb
return ()
总的来说,结合律的验证可能很困难。当然,可以编写测试,但确保关联性的理想方法是编写定律的数学证明。在某些情况下,等式推理足以证明结合性。有时候,我们也需要归纳。
关于haskell - 违反结合律的不正确 monad 的例子是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60768312/
出现以下错误: INSERT INTO GroupMembers VALUES ('Goldfrat', 'Simon Palm') * ERROR at line 1: ORA-02291: int
据称以下代码违反了 OO 指导原则。 public class Main { public static String NAME = "James"; public Main() {
我创建了一个名为 EvenementBean 的 EJB 2 进行测试。然后我就把它删除了。现在每当尝试部署我的 .ear 项目时,我都会收到以下错误: WARN [verifier] EJB
我正在开发的一个应用程序正在使用 Oracle 和 Hibernate 作为 ORM。当我尝试插入 PartyUserObject 时,我不断收到以下错误: could not insert: [Pe
我已经实现了一些代码行: if(condition){ Class a = new Class(); method(a.b(), a.c()); }else{ method(null, n
这个问题在这里已经有了答案: Static analysis of noexcept "violations" in C++ (2 个答案) 关闭 4 年前。 我大量使用 noexcept,不幸的是
我有一个 MVVM 应用程序,在我的几个 VM 中,我使用 CollectionViewSource.GetDefaultView(datasource) 来初始化我的 ICollectionView
当我尝试运行我的网站时,它显示 500 internal server error : Internal Server Error The server encountered an internal
运行生存分析,假设变量的 p 值具有统计显着性 - 假设与结果呈正相关。但是,根据 Schoenfeld 残差,违反了比例风险 (PH) 假设。 在纠正 PH 违规后,以下哪种情况可能发生? p 值可
我知道以下是一个主观问题,但您的指导方针确实有助于我追求干净、可测试的代码。 请考虑以下示例,我认为它违反了一系列设计原则。 public class OfferEligibilityCheckerS
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
当我尝试将 Paho MQTT javacrript 与 Mosquito MQTT websockets 一起使用时,只要我用来服务页面的 Web 服务器和 Mosquito 位于同一服务器(同一来
我在通过 hibernate 映射 oracle 时遇到问题 我有这些类(class) Stock.java package com.mc.stock; import java.uti
在我的项目中,我试图解决 Sonar 违规问题,我坚持使用这个,我有以下代码 不允许使用以下属性:语言 谁能告诉我如何解决这个 Sonar 违规问题?我可以简单地删除这种“语言”吗属性还是我应该输
我正在尝试记录唯一标识符,所以我无法承受重复记录我的 ID 当我尝试更新名为 Clients 的 SQL Server 表时,我收到类似这样的错误。 Violation of PRIMARY KEY
我正在尝试实现一个解决方案,以在给定的整数列表中找到第 k 个最大的元素,其中重复项具有 O(N*log(N)) Big-O 表示法的平均时间复杂度,其中 N 是列表中元素的数量。 根据我的理解,合并
如果 tuple_size 模板是一个完整的类型,结构化绑定(bind)特性表示它会像分解一样与元组一起使用。当 std::tuple_size 在程序的某一点是给定类型的完整类型而在另一点不完整时会
我们的应用目前已从 google play 中删除,因为它具有 SMS 权限。我们已经删除了权限并上传了一个新的 apk,但项目的状态仍然是删除。我们是否必须等待他们审核,或者是否需要任何其他必要的步
*i 和 u.i 如何在此代码中打印不同的数字,即使 i 被定义为 int *i = &u.i;?我只能假设我在这里触发了 UB,但我看不出具体情况。 ( 如果我选择“C”作为语言,ideone de
您好,我正在 Oracle SQL dev 中开发一个数据库,它试图从另一个表访问外键。我目前正在处理使用以下 CREATE 语句创建的 ItemOrdered 表 CREATE TABLE Item
我是一名优秀的程序员,十分优秀!