2014-05-10 16 views
7

kabul etmiyor?GHC Bu bildirim çalışmıyor GADT tipi imzasını

+11

Kullanım infix biçimi '->. Neden bir fark yarattığına dair hiçbir fikrim yok ama aslında öyle. (yani… veri… burada {Identity :: a -> Identity a} ') – jgriego

+4

Bu, daha önce yapılmamışsa bir hata olarak bildirilmelidir. – kosmikus

+7

@ qu4ntumcpa: fark, GADT yapıcısı bildirimlerindeki imzaların, başka herhangi bir yerde izin verilmeyen katılık ek açıklamaları ('!') Içerebileceğidir. GHC'nin GADT tipi imzalar ve diğer tip imzalar için iki ayrı grameri olduğunu sanıyorum. Ayrıca, bazı (zayıf!) Argümanların kurucuların gerçekten fonksiyon olmadığını ve önek sözdizimi '(->)' türünün onun üzerinde özgürce genelleştirebileceğinizi öne sürdüm (ki bu da doğru değil). '!'). –

cevap

2

En azından o zaman, GADT desteğiyle ilgili kod typechecks çevirip yaparsa ghc 7.8, itibariyle ne beklediğiniz:

{-# LANGUAGE GADTs #-} 
data Identity a where {Identity :: (->) a (Identity a)} 

sonuçlanan:

GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
[1 of 1] Compiling Main    (foo.hs, interpreted) 
Ok, modules loaded: Main. 
λ» :i Identity 
data Identity a = Identity a -- Defined at foo.hs:2:1 
+0

GHC 7.6'da çalışmıyor. – ThePiercingPrince