I tried to model a less naive monadic encoding of non-determinism (less naive than MonadPlus and common lists) in Coq that is often used in Haskell; for example the encoding for lists looks like
data List m a = Nil | Cons (m a) (m (List m a))
whereas the corresponding definition in Coq would like as follows.
Inductive List (M: Type -> Type) (A: Type) :=
Nil: List M A
| Cons : M A -> M (List M A) -> List M A.
However, this kind of definition is not allowed in Coq because of the "strictly positive"-condition for inductive data types.
I'm not sure if I am aiming for a Coq-specific answer or an alternative implementation in Haskell that I can formalise in Coq, but I am happy to read any suggestions on how to overcome this problem.