Hi, I am stuck fixing issue #9582

  https://ghc.haskell.org/trac/ghc/ticket/9582

I need to test whether one type is a subtype of another and throw a custom error if this is not the case. I tried

  (errMsgs, result) <- tryTcErrs $
    tcSubType ctOrigin userTypeCtxt local_meth_ty sig_ty

  case result of
    Just _coercion -> return ()
    Nothing -> badInstSigErr sel_name local_meth_ty

However, it does not seem to do what I expect. It acts as if I had not tried to catch the error, it acts as just

  tcSubType ctOrigin userTypeCtxt local_meth_ty sig_ty

My hypothetical explanations:

1. 'tryTcErrs' is not the correct function to catch errors in the type checker. Or,

2. 'tcSubType' does not generate errors, just postponed constraints, which are checked later in a clean-up phase. Thus, I do not get an error now I could handle, but the error is generated later during the constraint solving phase, where I do not have a handler in place. In this case, I would need something like Agda's noConstraints,

  tryTcErrs $ noConstraints $ tcSubType...

which forces 'tcSubType' to check without generating new unification constraints.

Any advice how to do is or where to continue searching?

Thanks,
Andreas


--
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.a...@gu.se
http://www2.tcs.ifi.lmu.de/~abel/
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to