Troubleshooting
Here are some common compiler errors you might encounter and suggested solutions for them while using WebGear.
Missing Trait Constraints
Could not deduce (Get h (RequiredQueryParam "tag" Text) Request)
arising from a use of ‘queryParam’
from the context:
This means that you have used a middleware (or some other function) that is probing for the specified trait (in this
case RequiredQueryParam "tag" Text) but you have not added a constraint to the type signature of this function.
You can fix this by adding the constraint mentioned in the error message to the type signature. But it is more likely
that you already have a constraint of the form StdHandler h m reqs resps there. In that case, you can add the trait
RequiredQueryParam "tag" Text to the reqs type list.
You might get a similar error for missing Set constraints:
In this case, you can add the JSONBody ErrorResponse trait to the resps type list. In other words, a constraint like
this will resolve both these errors:
Missing Trait Proofs
In this case, you are missing a proof that a linked request has certain traits. There are a few possible fixes:
- Make sure that the specified trait is actually required by your handler and the type level literals such as "offset" are spelled correctly.
- Did you add a correct middleware in this handler? For example, this error suggests that it is looking for a
queryParam @"offset" @Intmiddleware. Did you intend to add that middleware before invokingfrom? - Alternatively, you may want to add that middleware in the function calling the current handler. In that case, you can
add the
HasTrait (RequiredQueryParam "offset" Int) reqconstraint to the current handler.
If you have many such handlers, use HaveTraits [t1, t2, ....] req instead where t1, t2, ... are traits.