2013-04-09 52 views
10

我意外地發現,以下是完全編譯代碼:爲什麼類可以用作類型參數以及用於什麼?

class SomeClass a 

someValue :: Maybe (SomeClass a) 
someValue = undefined 

我只是看慣式約束的類,所以我不明白爲什麼這個代碼typechecks,什麼是目的以這種方式使用類。

我在GHC 7.6.2上。

+0

您是否打開了任何GHC擴展?啓用約束類型後,我希望你會得到一種不匹配,即'Maybe :: * - > *'vs'SomeClass :: * - > Constraint'。如果內存服務於我,那麼類和類型共享相同的名稱空間,而且這是最好的一種錯誤,所以我不確定爲什麼它會被編譯器接受。 – 2013-04-09 13:47:36

+0

@ C.A.McCann號無。只是一個文件的簡單'runghc'與問題中的內容。 – 2013-04-09 13:49:54

+0

出於好奇,如果用'Nothing'替換'undefined',會發生什麼? – 2013-04-09 13:50:57

回答

11

它在GHC-7.6.2的錯誤。這應該是一個善良的錯誤。請報告。

+4

原來已經修復:http://hackage.haskell.org/trac/ghc/ticket/7825#comment:1 – 2013-04-09 15:38:33

3

錯誤。

A.hs:3:21: 類`SomeClass的用作類型

In the type signature for `someValue': 
+0

忘了提。我在GHC 7.6.2 – 2013-04-09 13:45:47

相關問題