Proxy is a type that holds no data, but has a phantom parameter
of arbitrary type (or even kind). Its use is to provide type
information, even though there is no value available of that type (or
it may be too costly to create one).
Historically,
Proxy :: Proxy a is a safer
alternative to the
undefined :: a idiom.
>>> Proxy :: Proxy (Void, Int -> Int)
Proxy
Proxy can even hold types of higher kinds,
>>> Proxy :: Proxy Either
Proxy
>>> Proxy :: Proxy Functor
Proxy
>>> Proxy :: Proxy complicatedStructure
Proxy