SORU
13 HAZİRAN 2010, Pazar


Haskell Garip Tür: (- >)?? -> ? -> *

Haskell tür deniyordum, ve -> ve bu tür ortaya çıktı almaya çalışırken:

$ ghci
...
Prelude> :k (->)
(->) :: ?? -> ? -> *
Prelude> 

Yerine beklenen * -> * -> *. Ne ?? ? şeyler? Beton türleri anlamına mı gelir ya da ""? tür değişkenler Ya da başka bir şey?

CEVAP
13 HAZİRAN 2010, Pazar


Bu Haskell tür bir sistemin DZD-özel uzantıları vardır. Haskell 98 raporu 11**:

... tür ifadeler gizli al bir tane farklı tür, içine iki olası formları:

Sembol * türünü temsil eder tüm nullary tür markalar. K1 eğer ve çeşit k2, k1 -^ o zaman . k2. sanki bir tür bu tür tür k1 ve k2 türü döndürür.

Biraz formu extends this system, unboxed types, izin kistlerinin alt tiplerinin belirlenmesindeki ve işlev construtor çeşit üzerinde polimorfik izin vermek için DZD. Kafes DZD destekliyor biraz da

             ?
             /\
            /  \
          ??   (#)
          / \     
         *   #     

Where:       *   [LiftedTypeKind]   means boxed type
             #   [UnliftedTypeKind] means unboxed type
            (#)  [UbxTupleKind]     means unboxed tuple
            ??   [ArgTypeKind]      is the lub of {*, #}
            ?    [OpenTypeKind]     means any type at all

ghc/compiler/types/Type.lhs tanımlanmış

Özellikle:

> error :: forall a:?. String -> a
> (->)  :: ?? -> ? -> *
> (\\(x::t) -> ...)

Son örnek t :: ?? (yani Kutusuz bir demet değil). Alıntı DZD için, "tür düzeyinde biraz kistlerinin alt tiplerinin belirlenmesindeki var".

İlgilenen ruhlar, DZD de destekler zorlama türleri ve tür ("türü terimler hangi hareket olarak kanıt türü için eşitlik", gerektiği gibi System Fc) kullanılan GADTs, newtypes ve tür aileler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly

    Elly

    3 EKİM 2005
  • funbro1

    funbro1

    11 Aralık 2007
  • Kindness

    Kindness

    23 Ocak 2006