Inline type hints for polymorphic results of copy_from_string and friends

When dealing with functions that can return anything, such as copy_from_string, it is sometimes difficult to get the types straight when the returned thing is polymorphic.

For instance:

import StdEnv
import dynamic_string

Start = (reverse` [1..5], reverse` ['a'..'e'])
where
	reverse_s = copy_to_string reverse
	(reverse`,_) = copy_from_string reverse_s

This fails with a type error, since reverse` cannot take a [Int] in the first element of the tuple and a [Char] in the second element.

I then tried to make the polymorphism explicit:

cast_rev :: (A.a: [a] -> [a]) -> [a] -> [a]
cast_rev f = f

Start = (cast_rev reverse` [1..5], cast_rev reverse` ['a'..'e'])

But that fails as well:

Type error [type.icl,6,Start]:"argument 1 of cast_rev : reverse`" cannot unify demanded type with offered type:
 [E.12 ] -> [E.12 ]
 [E.16 ] -> [E.16 ]

Would allowing inline type hints be possible, like so:

(reverse` :: A.a: [a] -> [a],_) = copy_from_string reverse_s

(I'm not sure if it is possible/a good idea to overload this syntax for dynamics.)

Or is there a reasonable workaround?