Data.Typeable ile çalışıyorum ve özellikle belirli türde bir tür üretebilmek istiyorum (örneğin *
). İşteHaskell Tür Tip Oluşturucu almak mümkün mü?
let maybeType = typeRep (Proxy :: Proxy Maybe)
let maybeCon = fst (splitTyConApp maybeType)
let badType = mkTyConApp maybeCon [maybeType]
badType
tip temsili Belki Belki bir anlamda ise şöyledir: İçine çalıştırıyorum sorun TypeRep bize (ghc 7.8 sürümüyle çalışan) aşağıdakileri yapmanız olanak sağlamasıdır herhangi Kind geçerli bir türü:
> :k Maybe (Maybe)
<interactive>:1:8:
Expecting one more argument to ‘Maybe’
The first argument of ‘Maybe’ should have kind ‘*’,
but ‘Maybe’ has kind ‘* -> *’
In a type in a GHCi command: Maybe (Maybe)
Ben tür düzeyinde bu zorlama aramıyorum ama zamanında böyle tipleri inşa önlemek için yeterince akıllı bir program yazabilmek istiyorum. Bunu TypeRep
ile veri düzeyi şartları ile yapabilirim. İdeal olarak, ben (muhtemelen gerçekten kindOf (Proxy :: Proxy Int) = Star
) ve kindOf Maybe = KFun Star Star
, böylece benim TypeRep değerini "tür-kontrol" olabilir
data KindRep = Star | KFun KindRep KindRep
gibi bir şey var ve bir fonksiyonu kindOf Int = Star
ile kindOf
olurdu.
Bunu el ile Typeable
gibi çok noktalı bir yazım hatası ile yapabileceğimi düşünüyorum, ancak her şey için kendi örneklerimi yazmak zorunda kalmamayı tercih ediyorum. Ayrıca, GHC 7.6'ya geri dönmemeyi ve farklı tipte Tip türleri için ayrı tip sınıfları olduğunu kullanmayı tercih ederim. Bu bilgiyi GHC'den alan yöntemlere açığım.
'typeOf1' ve' Typeable1' (ve arkadaşlar) hala 'Data.Typeable' öğesinden dışa aktarılıyor ... bunlar 7.8'de kullanılabilir. –