Veri DZD-7.6 promosyon Yapıcı
Bu kod vardı:
class SymbolSet tpe where
data Symbol tpe :: *
data SSet tpe where
Identity :: tpe -> SSet tpe
And :: SSet tpe -> Symbol tpe -> SSet tpe
class HasElem a b where
instance (SymbolSet tpe) => HasElem (And (Identity tpe) s) s
instance (HasElem sset s) => HasElem (And sset s) s
DZD-7.4 derleme oldu. DZD-7.6 geçmeden ancak derleme hataları vermeye başladı:
'And' of tpe `forall tpe. tpe -> Symbol * tpe -> SSet tpe' is not promotable
doktorlar eşeleyip, yeni bir fıkra "Türü GHC-7.6 vs GHC-7.4 ." sayfa Tanıtım eklenen buldum
Polimorfik tür,kimin türleri teşvik etmiyoruz kısıtlamaları dahil, ya da varoluşsal ölçümü kullanın.
Benim sorum:
- Bu kurucular teşvik değil arkasındaki mantık nedir?
- Bunu yapmanın doğru yolu nedir?
CEVAP
Biraz tahmin ediyorum ya, vardır kullanarak, hangisi olduğunu söylemedin.
This ticket soru tamamen sorunu kendim anlamıyorum rağmen 1, cevap gibi görünüyor. Belirli bir örnekte, SSet
argümanlarından biri (Symbol tpe
) SymbolSet
kısıtlama getiriyor ilişkili bir tür olduğu için promotable değil bence.
Eğer Symbol
tip terfi alırız sınıfı dışında hareket edersem, ancak şimdi uyuşmazlığı hataları tür elde ederiz
{-# LANGUAGE DataKinds , TypeFamilies , GADTs , MultiParamTypeClasses #-}
class SymbolSet tpe where
-- data Symbol tpe :: *
data Symbol tpe :: *
-- ...
Hepsi imzaları HasElem
: çeşit ekleyerek derlemeye alabilirim
{-# LANGUAGE DataKinds , TypeFamilies , GADTs , MultiParamTypeClasses, FlexibleInstances #-}
class SymbolSet tpe where
-- MOVED OUT OF CLASS:
data Symbol tpe :: *
data SSet tpe where
Identity :: tpe -> SSet tpe
And :: SSet tpe -> Symbol tpe -> SSet tpe
-- ADDED KIND SIGNATURES:
class HasElem (a :: SSet *) (b :: Symbol *) where
instance (SymbolSet tpe) => HasElem (And (Identity tpe) s) s
instance (HasElem sset s) => HasElem (And sset s) s
Gerçekten bu sizin için çalışmayabilir bu yüzden kodunuzu anlamıyorum.
Uygulamak için en iyi yolu Çekirdek Ve...
Arama, birden çok dizin farklı veri se...
Nasıl MySQL bir sütun veri türünü deği...
Veri bir tablo içinde sıralama satır...
Haskell Tür vs Veri Kurucu...