For anyone that is struggling to understand generics in regular Java/c#-ish languages, have a go at learning the basics of CLOS, the Common Lisp object system. This uses "generics" ("generic functions" in CLOS jargon) as a pretty fundamental component, essentially doing what method calls are in an "ordinary" OO language. In fact, CLers tend to use "method" to mean "generic function with a signature that contains this class, plus some other assumptions".<p>Once you "get" OO where all method calls are generic calls, you will have a more intuitive understanding of them.