A couple of years ago (2011/2012) I remember stumbling across a paper or a webpage which talked about how in pure functional languages, you can tell a lot about what a function will do just by examining its type signature. Unfortunately after much Googling I haven't stumbled across it again. (Partly because I don't know what search terms to use)
My question is: How much information about a function can you deduce from its type signature?
For massive brownie points: Provide some links to external resources which discuss this or related issues
An example of what I'm looking for: If I remember correctly, a function with the type signature
a -> a has to be the identity function.