为什么Haskell中的$运算符具有如此奇怪的类型?

rad*_*row 5 haskell types

根据Hackage$操作员具有类型

($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b 
Run Code Online (Sandbox Code Playgroud)

虽然我一直以为

($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

在文档中有一些解释

请注意,($)其结果类型为levity-polymorphic,因此foo $ True,其中foo :: Bool-> Int#的类型正确

但我一点也不明白。有人可以向我解释这种方法解决的问题吗?