Would I be correct in thinking: The difference between these two is that the type b can be "fixed" upon application of amy to the first two arguments (given context), whereas bob applied to two arguments MUST return a function that is applicable to every type.
amy :: Int -> a -> b -> [Either a b]
bob :: Int -> a -> (forall b. b) -> [Either a b]