下面是奧列格自己的意見,我的評論和他的澄清。
O.K.首先我想註冊我與Gabriel Gonzalez的分歧。並非所有人都同意MonadPlus
應與 相關mplus
和mzero
應該是monoid。報告沒有提到這一點。如果不是這樣,那麼 就是很多引人注目的案例(見下文)。一般來說,代數結構應該適合任務。這就是爲什麼我們有 組,還有更弱的半羣或類羣(岩漿)。看來 MonadPlus
通常被認爲是一個搜索/非確定性單子。如果是這樣, 然後MonadPlus
的屬性應該是促進 搜索和推理有關搜索 - 而不是一些理想的ad hoc特性 性能某人喜歡出於任何原因。讓我舉一個例子: 很容易讓人斷定法律
m >> mzero === mzero
然而,支持搜索和可以做其他的效果單子(想 NonDeT m
)不能滿足該法律。例如,
print "OK" >> mzero =/== mzero
因爲左側打印的東西,但右手 沒有。同樣的道理,mplus
不能是對稱的:mplus m1 m2
一般不同於mplus m2 m1
,在同一模型中。
讓我們來mplus
。有兩個主要原因不要求mplus
是關聯的。首先是搜索的完整性。考慮
ones = return 1 `mplus` ones
foo = ones `mplus` return 2
=== {- inlining ones -}
(return 1 `mplus` ones) `mplus` return 2
=== {- associativity -}
return 1 `mplus` (ones `mplus` return 2)
===
return 1 `mplus` foo
因此,似乎coinductively one和foo是相同的。那 的意思是,我們永遠不會從foo得到答案2。
該結果適用於可由MonadPlus
表示的任何搜索,因此 只要mplus
是關聯性和非交換性的。因此,如果MonadPlus
是一個 monad用於搜索,則mplus
的關聯性是不合理的要求。
這裏是第二個原因:有時,我們希望有一個概率 搜索 - 或者,在一般情況下,加權搜索,當一些替代品 加權。很顯然,概率選擇算子不是聯想性的。出於這個原因,我們的JFP文件特別避免 在MonadPlus
上施加monoid(mplus
,mzero
)結構。
http://okmij.org/ftp/Computation/monads.html#lazy-sharing-nondet (參見論文的圖1的討論)。
R.C. 我認爲加布裏埃爾和你同意這個事實,搜索monad不 展覽monoid結構。這個論點歸結爲 MonadPlus
應該用於搜索monads還是應該有另一個 類,我們稱之爲MonadPlus'
,這就像MonadPlus
,但 更寬鬆的法律。正如你所說,這份報告在這個主題上沒有說什麼,也沒有權力決定。
出於推理的目的,我沒有看到任何問題 - 一個 只是要清楚地陳述她對MonadPlus
實例的假設。
至於是重新聯營mplus
「ES重寫規則,僅僅存在 和廣泛使用MonadPlus
情況下是不相關聯, 無論它們是否是‘破’,就是應該大概 忌諱定義它。
O.K. 我想我與加布裏埃爾的聲明
不同意幺法律是最低限度的要求,因爲 沒有他們的其他法律是沒有意義的。例如,當你說 mzero >>= f = mzero
,你首先需要一些明智的定義 mzero
是,但沒有身份法律你沒有。幺半律是其他提出的法律是「誠實」的。如果你沒有 有幺半律,那麼你沒有明智的法則,什麼是沒有規律的理論類型的點 ?
例如,LogicT紙特別是JFP紙具有許多有關的非確定性等式推理 例子,而不 關聯的mplus
。 JFP文件省略了所有幺半律:mplus
和mzero
(但使用mzero >>= f === mzero
)。看起來可以有 「誠實」和「明智的法律」爲非決定論和搜索沒有 幺半律mplus
和mzero
。
我也不能肯定我同意要求
的兩部法律,每個人都同意,MonadPlus
應該服從是 身份和關聯的法律(又名獨異規律):
我不確定有人對此進行過民意調查。該報告沒有提供 的mplus
法律(也許作者仍在辯論它們)。所以,我 會說這個問題是開放的 - 這是獲得 的主要信息。
然後你得到一個答案,然後問題就變成了,如果你信任Stack Overflow或者Haskell wiki或者Oleg Kiselyov。 –
很多時候,這些規則只是根據某些可觀察的性質而被遵守。 Iirc,FreeT的快速版本只服從MonadTrans法則之一(我認爲''lift。return == return'),如果你不能直接看結構,但是因爲構造函數被隱藏起來就沒問題。因此,在這種情況下,我們可以很容易地說法律是滿足的 - 只要我們只使用完整的搜索策略,就可以得到相同的結果,並且可以隱藏搜索中事物的深度樹是。誰知道,爲方便起見,違反法律是否可以接受。 – DarkOtter
羅馬,好點。 –