It's sometimes possible. For instance, we all know that there are no "proper" values with type forall a. a and only one with type forall a . a -> a, but there are an infinite number of ones with type forall a. (a -> a) -> a -> a.
In particular, you can think of some Haskell types as expressing theorems in type theory and the process of instantiating them as the process of proving that theorem. There's no general method for doing this, but there are a number of tautological types like forall a . a -> a which have easily discoverable proofs.
To learn much more about this process, consider reading Software Foundations by Benjamin Pierce or Certified Programming with Dependent Types by Adam Chlipala. These two both explore how to prove theorems (instantiate types) like this using the language Coq which is similar to Haskell being based on OCaml.
djinn? It performs this exact task... and is written in Haskell.