首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法声明在Monad上约束的MonadPlus接口

无法声明在Monad上约束的MonadPlus接口
EN

Stack Overflow用户
提问于 2020-08-01 23:11:30
回答 1查看 76关注 0票数 2

我尝试这样声明MonadPlus接口:

代码语言:javascript
复制
module NanoParsec.Plus

%access public export

interface Monad m => MonadPlus m where
    zero : m a
    plus : m a -> m a -> m a

但是有一个错误:

代码语言:javascript
复制
  |
5 | interface Monad m => MonadPlus m where
  |           ~~~~~~~
When checking type of constructor of NanoParsec.Plus.MonadPlus#Monad m:
When checking argument m to type constructor Prelude.Monad.Monad:
        Type mismatch between
                Type (Type of m)
        and
                Type -> Type (Expected type)

我哪里做错了?如何解决这个问题?Idris没有自己的MonadPlus接口,我说的对吗?如果有,原因何在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 02:38:32

在Idris中,当您定义接口时,参数类型默认为Type,因此这里的MonadPlus mMonadPlus (m: Type)的缩写,并且Idris将m视为Type。这当然不符合约束Monad m,它需要一个Type -> Type

如果你想在其他东西上参数化,就必须明确一点,比如

代码语言:javascript
复制
interface Monad m => MonadPlus (m: Type -> Type) where
    zero : m a
    plus : m a -> m a -> m a

MonadPlus本身超出了我的知识范围,所以我不知道它在Idris中的存在或缺失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63206752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档