2013-04-09 8 views
10

Yanlışlıkla aşağıdaki gayet derleme kod olduğunu keşfettim:Neden sınıflar tip parametreleri olarak ve ne için kullanılabilir?

class SomeClass a 

someValue :: Maybe (SomeClass a) 
someValue = undefined 

Ben sadece tip kısıtlamaları sınıfları görmeye alışkınım, bu yüzden anlamıyorum neden kod typechecks ve amacı nedir bu sınıfları bu şekilde kullanarak.

GHC'deyim 7.6.2.

+0

Herhangi bir GHC uzantısı var mı? Kısıtlama türleri etkinleştirildiğinde, türün bir uyumsuzluğunu, yani 'Belki :: * -> * 've' SomeClass :: * -> Constraint' türlerini alacağınızı umuyorum. Bellek bana hizmet ediyorsa sınıflar ve türler aynı ad alanını paylaşır ve bu en iyi ihtimalle bir tür hatadır, bu yüzden derleyicinin neden kabul edileceğinden emin değilim. –

+0

@ C.A.McCann No. Yok. Sadece soruların içeriği ile bir dosyanın basit bir 'runghc'. –

+0

Merak etme, 'undefined' yerine 'Nothing' ile değiştirirseniz ne olur? –

cevap

11

Bu ghc-7.6.2 bir hata olduğu gibi kullanılır. Bu tür bir hata olmalı. Lütfen rapor et.

+4

Zaten sabit olduğu ortaya çıktı: http://hackage.haskell.org/trac/ghc/ticket/7825#comment:1 –

3

Hata.

A.hs: 3: 21: Sınıf `SomeClass' bir tür

In the type signature for `someValue': 
+0

Unutmayın. GHC üzerinde yaşıyorum 7.6.2 –