有一個默認的單元類型,即()。我正在尋找一個多態的一個(最好是在Hackage),例如:Haskell中是否有默認的多態單元類型haskell
data PUT a = PUT
或者一個多態零類型:
data PZT a = PZT (PZT a)
所以,是的,我可以寫一個自己,通過任一以上陳述。我正在尋找一個黑客。
我需要它,是因爲我有多個類型參數的類,它包含一個不使用其中的一個功能:使用此功能「someFunction」當
class MyClass a b where
someFunction :: a
-- and some other functions
,GHC不能找到合適的情況下,所以我改變了我的定義是:
class MyClass a b where
someFunction :: (PUT b) -> a
現在,當我打電話someFunction,我可以使用(PUT :: SOMETYPE)作爲第一個參數,和Haskell可以得到我的意思是這實例。每次我使用這個技巧時,我都會編寫一個新的多態單元類型(它只是一行代碼),在組合不同的庫時會給我一些額外的工作(因爲我最好在各處使用相同的構造函數)。 我確定其他人遇到這個問題,所以也許他們中的一個把解決方案放在hackage(ghc的包管理器)中?我想導入它。我是在尋找錯誤的東西,還是不存在黑客行爲?
我很困惑「多態零型」的含義。我本可以預料它是一種無人居住的類型,除了未定義類型之外,就像Void一樣。但是我可以通過'let p = PZT p'構造一個你的PZT類型的值,並且可以成功地進行模式匹配,所以無論我誤解PZT的含義,還是你的PZT都不是一個。當然,你可以更簡單地構建一個多態Void:'數據避免一個'無人居住。 – amalloy 2014-09-29 18:49:23
確定你不需要funDep在那裏?幫助推斷MPTC。 – 2014-10-09 14:21:11
事實證明,你並不需要這種類型。下面也有效: 'class MyClass ab where someFunction ::(fb) - > a' 請注意,由於沒有關於f的信息(它不適用於任何應用程序或任何東西),這意味着沒有辦法到達b,這正是我所需要的。 – Sebastiaan 2015-03-07 15:18:09