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.