我很好奇在Functional Pearl: Implicit Configurations文章Kiselyov和撣討論了反對implicit parameters。隱式參數是GHC內聯的難點嗎?
在存在隱式參數的情況下內聯代碼(β-reduce)並不健全。
真的嗎?我希望GHC應該與傳遞的隱式參數一樣嵌入到相同的範圍內,否?
我相信我理解他們的反對意見認爲:
一個術語的行爲可以改變,如果它的簽名是添加,刪除或更改。
GHC的用戶文檔解釋說,編程人員必須注意圍繞polymorphic recursion和monomorphism restriction。這在某種程度上是內聯問題的意思嗎?
我想這多態遞歸的例子講述了他們的「概括了隱含參數」,以及是什麼意思?還要別的嗎?
ReifiesStorable
類型的Data.Reflection類真的是一個明智的解決這些困難的方法嗎?它每次訪問時似乎都會對整個隱式數據結構進行反序列化,這對性能而言聽起來是災難性的。例如,我們可能希望我們的隱含信息是Cayley表或字符表,它佔據了一列ram,並且必須在數百萬代數操作中訪問。
有可能還有一些更好的解決方案,它採用隱含參數,或另一種技術的編譯器可以輕鬆地優化,在幕後,而仍然使用狀態的線程或任何保證通過類型系統嗎?
Ahh很好,所以'Data.Reflection'現在都是黑魔法。 :)有沒有你推薦閱讀的任何代碼或文章? 'Data.Reflection'已經讓我更加清楚,現在我注意到了examples目錄。不過,我應該在'Data.Tagged'和'Data.Proxy'上閱讀另一件事。 – 2012-04-28 14:24:30