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.