People in racket are using typep racket, clojure has annotation, in lisp you can declare types and sbcl infers them. Haskell also is fond of types. Perhaps in erlang types are not so important because you try to decompose the problem in small parts and hence is not so important to declare types?
Erlang has Dialyzer, which is an optional type checker and discrepancy analyzer.
He learned prolog at the lab?
We all learned prolog at the lab, well at least those of us who used prolog.