2015-08-24 18 views

回答

13

根據這個issue在錯誤跟蹤器中的舊定義不遵守聯想法則。


雖然我不太瞭解這樣的事情,我懷疑的另一個問題是冗餘:

Pure a 
Plus [Pure a] 
Plus [Plus [Pure a]] 
... 

似乎都代表同樣的事情。自由結構通常被認爲是獨一無二的。有些時候他們不能獨特地表現出來(例如,自由的阿貝爾團體),但是他們應該是可能的。

其實,我認爲建議的替代方案存在同樣的問題,儘管可能通過使用NonEmpty而不是[]來修復它。所以這種改變可能只是爲了從圖書館中刪除多餘的東西。

+3

你不應該在帖子中使用諸如「更新」或「編輯」之類的東西。編輯歷史足以查看何時更改/添加了某些內容。我冒昧地刪除它們(而不是內容),並將引用錯誤跟蹤器的部分移動到頂部,以便更容易訪問。 – Bakuriu

+0

@Bakuriu真的嗎?那麼,我們應該深入研究編輯歷史,而不是馬上看到有什麼變化?正常的方式太簡單了嗎? – MigMit

+3

@MigMit「正常的方式」,就像你說的那樣,是** noise **。如果我正在尋找答案,爲什麼我應該閱讀數百行無關的「編輯」,最終得到2行答案?答案應該最大化有用性,這意味着可讀性和易於訪問。將信息拆分成不同的塊通常不是一個好的解決方案。當問題/答案仍然不清楚/不完整時,可能會有問題,但一旦明確內容應該組織良好。如果有人想知道它是如何發展的,他可以看看編輯歷史,但這是元數據。 – Bakuriu

1

我相信,表示本身是確定和合法性本來可以糾正通過改變這些方法簽名

iter :: Functor f => (f a -> a) -> ([a] -> a) -> Free f a -> a 
iterM :: (Monad m, Functor f) => (f (m a) -> m a) -> ([m a] -> m a) -> Free f a -> m a 

iter :: (Functor f, Monoid a) => (f a -> a) -> Free f a -> a 
iterM :: (MonadPlus m, Functor f) => (f (m a) -> m a) -> Free f a -> m a 

  • 使用Monoid a代替任意功能ion [a] -> a in iter;
  • 使用MonadPlus m而不是任意功能[m a] -> m aiterM中。

我的猜測是,它被刪除(而不是固定的),因爲當FreeT f []給出等價的表示時,它不值得保留。