In Haskell, is there a way to restrict a monad M a
so that a
satisfy a type class constraint?
I am translating the probabilistic modeling e
It appears that I ran into a well-known problem in Haskell. I found many workarounds by googling for "restricted monads". This solutions seems to be the least disruptive. Still, for my purposes, it seems overkill. I think I'll keep the Distribution
monad general, and simplify a support via a restricted function, as suggested by Revolucent.
Check out Martin Erwig's library, PFP:
The PFP library is a collection of modules for Haskell that facilitates probabilistic functional programming, that is, programming with stochastic values. The probabilistic functional programming approach is based on a data type for representing distributions. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood.
My understanding of this is that you simply cannot, because a monad is meant to be generalized over all types, not some restricted subset of types such as (Ord a)
.
Instead of restricting the monadic type M a
, you can simply restrict functions which use that monadic type, e.g.,
foo :: Ord a => Int -> M a
In fact, it is preferable to keep types as general as possible and use type classes only to restrict functions.
etc.