Derleyici, türler hakkında JVM çalışma zamanının kolayca gösterebileceğinden daha fazla bilgi bilir. Manifest, derleyicinin, kaybolan tür bilgileri hakkında çalışma zamanında koda bir boyutlar arası mesaj göndermesinin bir yoludur.
Bu, Klepton'luların fosil kayıtlarında ve insanların "hurda" DNA'sında şifreli mesajlar bırakmalarına benzer. Işık hızının ve yerçekimi rezonans alanlarının sınırlamaları nedeniyle, doğrudan iletişim kuramazlar. Ancak, sinyallerini nasıl ayarlayacağınızı biliyorsanız, öğle yemeğinde ne yiyeceğinize veya hangi loto numarasını oynayacağınıza karar vermekten hayal edemeyeceğiniz şekillerde yararlanabilirsiniz.
Bir Manifest'in, daha fazla ayrıntı bilmeden gördüğünüz hatalara fayda sağlayıp sağlamayacağı açık değildir.
Manifestlerin yaygın bir kullanımı, kodunuzun bir koleksiyonun statik türüne göre farklı şekilde davranmasını sağlamaktır. Örneğin, bir List [Dize] 'yi diğer Liste türlerinden farklı bir şekilde ele almak isterseniz:
def foo[T](x: List[T])(implicit m: Manifest[T]) = {
if (m <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}
foo(List("one", "two")) // Hey, this list is full of strings
foo(List(1, 2)) // Non-stringy list
foo(List("one", 2)) // Non-stringy list
Buna yansıma temelli bir çözüm, muhtemelen listenin her bir unsurunun incelenmesini içerecektir.
Bağlam bağı, scala'da tür sınıflarını kullanmak için en uygun görünmektedir ve burada Debasish Ghosh tarafından iyi bir şekilde açıklanmıştır:
http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html
Bağlam sınırları, yöntem imzalarını daha okunaklı hale de getirebilir. Örneğin, yukarıdaki işlev, aşağıdaki gibi bağlam sınırları kullanılarak yeniden yazılabilir:
def foo[T: Manifest](x: List[T]) = {
if (manifest[T] <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}