SORU
9 Kasım 2013, CUMARTESİ


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:

  1. Bu kurucular teşvik değil arkasındaki mantık nedir?
  2. Bunu yapmanın doğru yolu nedir?

CEVAP
14 ŞUBAT 2014, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Tina Chen

    Tina Chen

    26 Mayıs 2012