Restringir una mónada a una clase de tipo

En Haskell, ¿hay alguna manera de restringir una mónada?M a así que esoa satisfacer una restricción de clase de tipo?

Estoy traduciendo elejemplo de modelado probabilístico deF# aHaskell. Sin embargo, en Haskell, omitísupport porque cambiaríadata Distribution a adata (Ord a) => Distribution a. Con este cambio, me sale el siguiente error:

...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 hecho, el tipo dealways/return es:(Ord a) => a -> Distribution a. ¿Hay alguna manera de tener una mónada?Distribution, pero forzar la restricción(Ord a) en esta mónada? Lo intenté:

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

Pero me sale el error:

...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.

Entonces hay una manera de tener una mónadaM a, pero restringir ela con una restricción comoOrd a?

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta