> Now before anyone cries foul, this is not about adding static typing to
> Ruby

If it provides hints for the compiler to cry on obvious errors, I
don't care what people call it.

> {<return type> => [<arg type 1>, <arg type 2> ...]}

I find it rather confusing that the return value is in front of the
argument list. Why not:

> args Integer, Array, String
> def mymethod(i, a) ...

The last one is the return value. I think Haskell uses a somewhat
similar notation: f :: a -> b -> c

This could be implemented as a class method that does nothing in
normal
ruby. This could be called a library change though.

Otherwise:
> [Integer, Array, String]
> def mymethod(i, a) ...