Type Families are not necessarily injective. Therefore, we cannot infer the parameter from an application. For example, in servant
, given a type Server a
we cannot infer the type a
. To solve this problem, we can use Proxy
. For example, in servant
, the serve
function has type ... Proxy a -> Server a -> ...
. We can infer a
from Proxy a
because Proxy
is defined by data
which is injective.