[英]What's the “|” for in a Haskell class definition?
我無法弄清楚“| m - > w”-part在類定義中意味着什么:
class (Monoid w, Monad m) => MonadWriter w m | m -> w
這增加了什么附加信息給類定義?
垂直條是一個句法分離器沒有任何意義本身,用於引入功能依賴於多參數類型的類,所以在技術上|
沒有任何意義。 據推測|
被選擇作為相同符號用於功能上的圖案防護的視覺類比。
就功能依賴性本身而言,只需讀取x -> y
作為“類型參數x
唯一確定類型參數y
”,這意味着僅知道x
就足以找到正確的實例。 還有其他復雜情況,特別是啟用了其他GHC擴展,但大多數時候您不需要擔心它們。
相反,在沒有功能依賴性的情況下,選擇多參數類型類的實例需要知道所有類型參數。 典型的例子有一個參數是容器類型,第二個是包含元素的類型; 諸如“concatenate”或“isEmpty”之類的函數不需要提及元素類型,只需要提及容器類型,因此是不明確的。
此外,如果您正在編寫自己的類型類,請考慮使用類型系列 ,這是一種可能最終取代功能依賴關系的新方法。 粗略地說,類型族允許您在實例中編寫重載類型定義 ,而不僅僅是重載函數。
它指定了功能依賴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.