Pratik düzeyde, sözleşmeler iddiadır. Bir programın bireysel uygulamalarının özelliklerini (niceliksiz) kontrol etmenizi sağlarlar. Kontrat kontrolünün merkezinde kilit fikir, suçlama fikridir - temel olarak, bir sözleşme ihlali için kimin suçlu olduğunu bilmek istersiniz. Bu, bir uygulama (söz verdiği değeri hesaplamayan) veya arayan (bir işlevi yanlış türde bir değere geçiren) olabilir.
Temel fikir, alan teorisinin ters sınır yapısında gömme-projeksiyon çiftleriyle aynı makineleri kullanarak suçlamayı izleyebileceğinizdir. Temel olarak, iddialarla çalışmaktan, biri program içeriğini suçlayan, diğeri ise programı suçlayan iddia çiftleriyle çalışmak arasında geçiş yaparsınız. O zaman bu, üst düzey fonksiyonları sözleşmelerle sarmalamanıza izin verir, çünkü işlev çiftinin tutarsızlığını, iddia çiftini değiştirerek modelleyebilirsiniz. ( Örneğin Nick Newton'un "Dinamik Yazma İşlemini Geri Alma" adlı makalesine bakın .)
Bağımlı türler türlerdir. Tipler, belirli programların kabul edilebilir olup olmadığını iddia etmek için kuralları belirtir. Sonuç olarak, işlevleri kötü davranışlı programların ilk başta var olmasını engellemek olduğundan suçlama kavramı gibi şeyleri içermezler. Suçlanacak hiçbir şey yok, çünkü sadece iyi oluşturulmuş programlar bile gramer ifadeleridir. Pragmatik olarak, bu, nicelikleri olan terimlerin özelliklerinden bahsetmek için bağımlı türleri kullanmanın çok kolay olduğu anlamına gelir (örneğin, bir fonksiyonun tüm girdiler için çalıştığı).
Bu iki görüş aynı değildir ancak birbiriyle ilişkilidir. Temel olarak, mesele şu ki, sözleşmelerle evrensel bir değerler alanıyla başlıyoruz ve işleri kesmek için sözleşmeler kullanıyoruz. Ancak türleri kullandığımızda, daha küçük değer alanlarını (istenen özellikte) belirtmeye çalışırız. Böylece ikisini tip odaklı ilişkiler aileleri (yani mantıksal ilişkiler) aracılığıyla bağlayabiliriz. Örneğin, bkz. Ahmed, Findler, Siek ve Wadler’in “ Herkes İçin Suçlama” ya da Reynolds’un “Türlerin Anlamı: İçselden Dışsal Semantik” e bakınız .