Restringindo uma mônada a uma classe de tipo

Em Haskell, existe uma maneira de restringir uma mônadaM a de modo aa satisfazer uma restrição de classe de tipo?

Estou traduzindo oexemplo de modelagem probabilística deF # paraHaskell. No entanto, em Haskell, eu omitisupport porque mudariadata Distribution a paradata (Ord a) => Distribution a. Com essa alteração, recebo o seguinte erro:

...probabilisticModeling.hs:42:13:
    Could not deduce (Ord a) from the context ()
      arising from a use of `always'
                   at ...probabilisticModeling.hs:42:13-18
    Possible fix:
      add (Ord a) to the context of the type signature for `return'
    In the expression: always
    In the definition of `return': return = always
    In the instance declaration for `Monad Distribution'

De fato, o tipo dealways/return é:(Ord a) => a -> Distribution a. Existe uma maneira de eu ter uma mônadaDistribution, mas force a restrição(Ord a) nesta mônada? Eu tentei:

instance Monad Distribution where
    (>>=) = bind
    return :: (Ord a) => a -> Distribution a = always

Mas eu recebo o erro:

...probabilisticModeling2.hs:48:4:
    Pattern bindings (except simple variables) not allowed in instance declarations
      return :: (Ord a) => a -> Distribution a = always
Failed, modules loaded: none.

Portanto, existe uma maneira de ter uma mônadaM a, mas restrinja oa com uma restrição comoOrd a?

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion