可能重複:
What's the 「|」 for in a Haskell class definition?MonadState的語法類型類聲明
我是很新,哈斯克爾。在documentation of MonadState我看到以下內容:
class Monad m => MonadState s m | m -> s where
get :: m s
put :: s -> m()
什麼是| m -> s
語法嗎?
可能重複:
What's the 「|」 for in a Haskell class definition?MonadState的語法類型類聲明
我是很新,哈斯克爾。在documentation of MonadState我看到以下內容:
class Monad m => MonadState s m | m -> s where
get :: m s
put :: s -> m()
什麼是| m -> s
語法嗎?
它被稱爲函數依賴關係或簡稱fundep。語法
class Monad m => MonadState s m | m -> s where
手段,僅存在一個用於每個m
或實例 - 換句話說,如果m
是已知的,該編譯器可以推斷的s
形式的類型。使用fundeps使編碼變得更容易,因爲編譯器可以推斷更多。
感謝您的快速和簡潔的答案。我搜索了「Haskell函數依賴」,現在正忙於閱讀http://www.haskell.org/haskellwiki/Functional_dependencies,希望能夠詳細闡述! – jchl
事實確實如此。搜索SO時我沒有發現這個問題。很難搜索「|」字符,當你不知道它叫什麼:) – jchl
確實如此。順便說一句,這需要一個語言擴展,如果您嘗試編譯這樣一個沒有任何編譯器標誌的定義,GHC會說'類'C'中的Fundeps(使用-XFunctionalDependencies以允許fundeps)''。模塊文檔還指定了所需的擴展名。要了解如何搜索,請記住一些事項。 :] –