Given the following code
type 'a id = 'a
module Foo : sig
val my-id: ('a -> 'a) id
end = struct
let my-id a = a
end
Foo.my-id ()
the type checker gives the following error
! [Type Error] at "test.saty", line 36, characters 9-18:
this expression has type
('a -> 'a) id (= ('a -> 'a))
and thus it cannot be applied to arguments.
It seems that the type ('a -> 'a) id which is equivalent to 'a -> 'a is treated as a type of non-arrow kind.