簡體   English   中英

Haskell類定義中的“|”是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM