The rmonad package is mysterious

I tried to do something simple using the rmonad package (attached). I followed the example that's in haddocks (it is wrong, constraints has no arguments), grabbed the list of extensions from rmonad's source, but this program doesn't typecheck: Could not deduce (Hashable a) arising from a use of `HM.singleton' This seems to be an obvious use of this package ... am I missing something ?

Hi, This is rather late, but in case it's useful: On 10/04/2013 19:30, Simon Marechal wrote:
I tried to do something simple using the rmonad package (attached).
I followed the example that's in haddocks (it is wrong, constraints has no arguments), grabbed the list of extensions from rmonad's source, but this program doesn't typecheck:
Could not deduce (Hashable a) arising from a use of `HM.singleton'
This seems to be an obvious use of this package ... am I missing something ?
The dictionaries for the superclasses are "wrapped up" in the data constructor MonadOutcome, so you need to unwrap it. For example: instance RMonad MonadOutcome where return (x :: a) = case constraints :: Constraints MonadOutcome a of OutcomeConstraints -> MonadOutcome (HM.singleton x 1) There are helper functions in Data.Suitable for doing this, for example withResConstraints infers the right 'a' from the inferred result type: import Data.Suitable (Constraints, withResConstraints) .... instance RMonad MonadOutcome where return x = withResConstraints $ \OutcomeConstraints -> MonadOutcome (HM.singleton x 1) (>>=) = undefined The documentation on hackage gives signatures and examples: http://hackage.haskell.org/package/suitable-0.1.1/docs/Data-Suitable.html http://hackage.haskell.org/package/rmonad-0.8.0.1/docs/Control-RMonad.html (note that the Set example doesn't need constraints for 'return' because Data.Set.singleton doesn't have an Ord constraint, but you can see it in the >>= implementation) Cheers, Ganesh
participants (2)
-
Ganesh Sittampalam
-
Simon Marechal