В Идрисе, когда вы определяете интерфейс, тип параметра по умолчанию равен Type
, поэтому MonadPlus m
здесь является сокращением от MonadPlus (m: Type)
, а Идрис рассматривает m
как Type
. Это, конечно, не соответствует ограничению Monad m
, которое ожидает Type -> Type
.
Вы должны быть явным, если хотите параметризовать что-то еще, например
interface Monad m => MonadPlus (m: Type -> Type) where
zero : m a
plus : m a -> m a -> m a
* 1012 Сам *
MonadPlus
мне неизвестен, поэтому я не знаю о его наличии или отсутствии в Идрисе.