[Haskell] rigid variables

David Roundy droundy at darcs.net
Thu Jul 20 13:58:02 EDT 2006


On Thu, Jul 20, 2006 at 10:48:02AM -0600, Rodney D Price wrote:
> 
> I've gotten this sort of error several times, which mysteriously  
> disappears when I add more functions to the code:
> 
> storeError.hs:13:38:
>     Couldn't match expected type `a' (a rigid variable)
>            against inferred type `String'
>       `a' is bound by the type signature for `throwError'
>         at <no location info>
>       Expected type: a
>       Inferred type: String
>     In the first argument of `return', namely `msg'
>     In the call (return msg)
> 
> (This is GHCi.)  The code is below.  The type variable a can't be
> bound to String, obviously, but a relative novice like myself has no
> idea why.  Can someone tell me?

> instance MonadError StoreError STM where
>     throwError (Default msg) = return msg

throwError :: e -> m a

The return type is wrong.  throwError needs to be able to return an
arbitrary type, which is more than a bit tricky.  It looks like in STM
you might only be able to do this using "check".
-- 
David Roundy


More information about the Haskell mailing list