Some thoughts about Puzzle 109: Suppose we had an employee record like this:
let r = new Employee in
Then we can apply our two functions and get a string:
departmentName(worksIn(r)) = "engineering"
What I find somewhat natural is to turn the functor F around (let me call that G), so we can find out the type of our data:
G(r) = Employee
Note that the value is a type, hence I had to write "=" rather than ":". However, because we're dealing with a functor, we can expect to get another G which can do this:
G(departmentName o worksIn) = Employee -> String
_Edit: After writing my reply to Simon Willerton's response I felt the word "String" should start with an uppercase letter._
But that's not what F does. F cannot point to any specific record (none of the F's can do that). Instead it maps a schema to the set of all possible records conforming to the schema C.
I'm not sure if this makes a lot of sense, but I think it's about somethjng which might bug programmers who'd like to learn about category theory.