В Haskell существует ли способ ограничить монаду M a
, чтобы a
удовлетворял ограничениям типа типа?
Я переводя пример вероятностного моделирования из F # to Haskell. Однако в Haskell я опустил support
, потому что он изменил бы data Distribution a
на data (Ord a) => Distribution a
. С этим изменением я получаю следующую ошибку:
...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'
Действительно, тип always
/return
: (Ord a) => a -> Distribution a
. Есть ли способ, которым у меня может быть монада Distribution
, но принудительное ограничение (Ord a)
на этой монаде? Я пробовал:
instance Monad Distribution where
(>>=) = bind
return :: (Ord a) => a -> Distribution a = always
Но я получаю ошибку:
...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.
Итак, это способ иметь монаду M a
, но ограничивать a
с помощью ограничения, такого как Ord a
?
Спасибо.