On Thu, Aug 27, 2015 at 10:59 AM, Christoph Höger < christoph.hoeger@tu-berlin.de> wrote: > Obviously, 'a is bound by its first occurrence in the type annotation, > here. Can someone explain this behavior? ​In a type annotation, the scope of variables is only the type annotation. So in your example the ['a] in the annotation of [a_to_opt] and the ['a] in the annotation of [None] are distinct. To refer to the same type, you need to use a local abstract type: let rec a_to_opt : type a. (a -> a option) = fun x -> (None : a ​ option​ )​​ -- Jeremie