Hafif HKT Kalıbı
Kind/URI işlevden arındırma yöntemini uygulayın.
Hafif HKT Kalıbı, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
İşlevsizleştirme
Kodlamanın ardındaki yaklaşımın bir adı vardır: işlevsizleştirme. Gerçek bir üst düzey tür işlevi yerine her işlevi bir etiketle temsil eder ve tek bir birinci dereceli aramayla çözümleriz. URItoKind kayıt defteri bu arama tablosudur.
type Kind<F extends URIS, A> = URItoKind<A>[F];
// One lookup replaces true type-function applicationKind Türü
Kind<F, A>, kalıbın dışarıya sunulan yüzüdür. Bunu "A'ya uygulanmış F kurucusu" olarak okuyun. Kayıt defteri indekslemesini temiz bir adın arkasında gizler.
type A = Kind<"Array", number>; // number[]
type B = Kind<"Option", string>; // string | nullF'yi URIS ile Sınırlandırma
F, kayıtlı bir URI olmalıdır. Yalnızca geçerli etiketlerin kullanılabilmesi ve yazım hatalarının derleme hatasına dönüşmesi için onu extends URIS ile sınırlandırın.
type Kind<F extends URIS, A> = URItoKind<A>[F];
// Kind<"Arrey", number> -> error, not a valid URIGenel İmzalar Yazma
Artık daha önce yazılması mümkün olmayan Functor imzasını yazabiliriz. Her F<A> ifadesini Kind<F, A> ile değiştirin; derleyici bunu kabul eder.
interface Functor<F extends URIS> {
map<A, B>(fa: Kind<F, A>, f: (a: A) => B): Kind<F, B>;
}Çözümlemenin Uygulanışı
F'yi somut bir URI'ye sabitlediğinizde Kind, gerçek kapsayıcı türüne çözümlenir. Bir Functor<"Array">, A[] türünden B[] türüne bir map işlemine sahiptir.
type ArrayFunctor = Functor<"Array">;
// map: <A, B>(fa: A[], f: (a: A) => B) => B[]Birden Çok Tür Argümanı
Örneğin Either<E, A> gibi bazı kurucular iki argüman alır. fp-ts, kalıbı URItoKind2 ve Kind2<F, E, A> ile * -> * -> * tür seviyesi için genişletir. Daha fazla kayıt defteri eklenerek aynı fikir büyütülebilir.
interface URItoKind2<E, A> {
Either: { left: E } | { right: A };
}
type Kind2<F extends URIS2, E, A> = URItoKind2<E, A>[F];fp-ts Kuralı
fp-ts, bu dersin baştan sona izlediği kuralı ortaya koymuştur: her veri türü için bir URI dizesi, bildirim birleştirmeyle genişletilen bir URItoKind kayıt defteri ve çözümleme için Kind. Bu kuralı tanımak, fp-ts ve Effect tür imzalarını okumanızı sağlar.
// In fp-ts you will see exactly:
// declare module "fp-ts/HKT" { interface URItoKind<A> { ... } }Bir Örnek Kaydı
Bir soyutlamanın "örneği", onu belirli bir URI için uygulayan bir değerdir. Örnek, somut map işlemini taşır. Dizi örneğini sonraki derste yazacağız; burada biçimi gösterilmiştir.
declare const arrayFunctor: Functor<"Array">;
const out = arrayFunctor.map([1, 2, 3], n => n * 2); // number[]Bunun Neden "Hafif" Olduğu
Bu kalıba hafif HKT denir; çünkü derleyici değişikliklerine veya özel söz dizimine ihtiyaç duymaz, yalnızca arayüzler ve indeksli erişim kullanır. Bunun karşılığında, gerçekten kapsayıcı-genel kod elde etmek için biraz ek törensellik (URI'ler ve kayıt defterleri) gerekir.
type Kind<F extends URIS, A> = URItoKind<A>[F];
// No magic, just a typed lookup tableSınırlamalar
Kalıp ayrıntılıdır ve hata iletileri, alanınızdan çok kodlamadan söz ettikleri için anlaşılması güç olabilir. Ayrıca her kapsayıcının kaydedilmesini gerektirir. Çoğu uygulamada bunu kendiniz oluşturmak yerine zaten bu işlemi yapan kütüphaneleri kullanırsınız.
// Trade-off: real abstraction power vs. encoding ceremonyBir Araya Getirme
Hafif HKT'nin tam tarifi şöyledir: bir URI tanımlayın, onu URItoKind'e kaydedin, soyutlamaları Kind<F, A> kullanarak tanımlayın ve her URI için örnekler sağlayın. TypeScript'teki genel işlevsel kütüphanelerin arkasındaki araç setinin tamamı budur.
type Kind<F extends URIS, A> = URItoKind<A>[F];
interface Functor<F extends URIS> {
map<A, B>(fa: Kind<F, A>, f: (a: A) => B): Kind<F, B>;
}Hızlı Kontrol
Hafif HKT kalıbını ne kadar anladığınızı sınayın.
Özet
Hafif HKT kalıbını oluşturdunuz.
- İşlevsizleştirme, tür işlevi uygulamasının yerini bir aramayla değiştirir.
Kind<F, A>, bir URI ile argümanı somut bir türe çözümler.- Genel imzalar,
F<A>yerineKindkullanır. - Kalıp,
Kind2aracılığıyla iki argümana ölçeklenir ve fp-ts kuralını oluşturur.
Sırada: gerçek örneklerle genel bir map var.
Sıkça Sorulan Sorular
“Hafif HKT Kalıbı” dersi ücretsiz mi?
Evet — “Hafif HKT Kalıbı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Hafif HKT Kalıbı” dersinde ne öğreneceğim?
Kind/URI işlevden arındırma yöntemini uygulayın. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Hafif HKT Kalıbı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.