{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, ScopedTypeVariables, FlexibleInstances  #-}
module Test where

import Control.RMonad.Prelude
import Data.Suitable (Constraints)
import qualified Data.HashMap.Strict as HM
import Data.Hashable (Hashable)

data MonadOutcome st = MonadOutcome { getOutcome :: HM.HashMap st Rational } deriving (Show)
data instance Constraints MonadOutcome a = (Hashable a, Eq a) => OutcomeConstraints

instance (Hashable a, Eq a) => Suitable MonadOutcome a where
    constraints = OutcomeConstraints

instance RMonad MonadOutcome where
    return x = MonadOutcome (HM.singleton x 1)
    (>>=) = undefined
