SORU
2 Mayıs 2013, PERŞEMBE


Neden ghci tür listeleri ve tür aileler desugar mu? Bu seçici devre dışı bırakılabilir mi?

Bu tür kütüphaneler benim için görüntüler mümkün olduğunca sezgisel ghci yapmaya çalışıyorum, ama daha gelişmiş özellikleri kullanırken birçok zorlukla karşılaştım.

Hadi bir dosya içinde bu kodu var:

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}

import GHC.TypeLits

data Container (xs::[*]) = Container

Ben ghci kadar yükleyin, sonra aşağıdaki komutu yazın:

ghci> :t undefined :: Container '[String,String,String,String,String]

Ne yazık ki, ghci bana oldukça çirkin görünümlü verir:

:: Container
       ((':)
          *
          String
          ((':)
             * String ((':) * String ((':) * String ((':) * String ('[] *))))))

ghci türü seviye dizeleri şeker kaldırıldı. Bunu ve bana çok sürümünü vererek ghci önlemek için herhangi bir yolu var mı?


İlgili bir kayda göre, sağlar Replicate fonksiyon türü bir düzeyde oluşturmak demek

data Nat1 = Zero | Succ Nat1

type family Replicate (n::Nat1) x :: [*]
type instance Replicate Zero x = '[]
type instance Replicate (Succ n) x = x ': (Replicate n x)

type LotsOfStrings = Replicate (Succ (Succ (Succ (Succ (Succ Zero))))) String

Bir tür LotsOfStrings kullanarak ghci sorduğumda şimdi:

ghci> :t undefined :: Container LotsOfStrings

ghci güzel ve bana çok sonuç verir:

undefined :: Container LotsOfStrings

Ama eğer Replicated sürümü için soruyorum

ghci> :t undefined :: Container (Replicate (Succ (Succ (Succ (Succ (Succ Zero))))) String)

ghci yerine yazın eşanlamlı bunu gelmeyince türü Aile için:

:: Container
       ((':)
          *
          [Char]
          ((':)
             * [Char] ((':) * [Char] ((':) * [Char] ((':) * [Char] ('[] *))))))

Neden ghci türü Aile yerine, ama yazın eşanlamlı yapıyor? Bir şekilde ghci yerine, her zaman kontrol etmek için var mı?

CEVAP
9 Aralık 2014, Salı


Senin üretime günlüğü cd dizin uygulama içeren ve bu iki komutları yürütmek için hedef sunucu/.

1. Son sürüme sıfırlayın

git reset --hard HEAD

2. Değişiklikleri çekin

git kökeni usta çekin

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • discokatze

    discokatze

    23 EYLÜL 2009
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • WiseOwlTutorials

    WiseOwlTutor

    21 EKİM 2011