当前位置: 首页 > 知识库问答 >
问题:

即使有类型约束也无法匹配类型错误

姚永年
2023-03-14

为什么会出现以下情况

foo :: MonadIO m => m ()
foo = print "hi"

导致以下错误

无法将类型“m”与“IO”匹配。“m”是一个刚性类型变量,由类型签名绑定:foo::forall(m::*-

据我所知,既然IO()应该等于MonadIO,MonadIO约束不应该允许这样做吗?

共有1个答案

宋丰
2023-03-14

IO不等于MonadIO

MonadIO是一个类型类,简单地说,它意味着所讨论的monad可以执行IO操作。实际上,由于IOmonad是“魔法”,这只能意味着两件事中的一件:所讨论的monad是IO本身,或者所讨论的monad以某种方式包装IO

为了表达这种包装思想,MonadIOtype类有一个方法liftIO::IO a-

所以,要修复代码,只需liftIO

foo :: MonadIO m => m ()
foo = liftIO $ print "hi"

 类似资料:
  • 销关节 cpPinJoint *cpPinJointAlloc(void) cpPinJoint *cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2) cpConstraint *cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1,

  • 泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也

  • 我在typescript中有以下泛型类 但是我不知道为什么得到这个错误Class'(匿名类)'不正确地扩展基类'列'。属性getValue的类型不兼容。类型'(值:数字)=

  • 本文向大家介绍PHP类型约束用法示例,包括了PHP类型约束用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP类型约束用法。分享给大家供大家参考,具体如下: 在强类型语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据; php是弱类型,其特点是无需为变量指定类型,而且在其后也可以存储任何类型,不过在php的新语法中,在某些特定场合,针对

  • 我正在使用graphql spring boot为spring boot项目中的graphql查询提供服务。现在,我正在将graphql方案类型定义与我的spring实体进行匹配。无论出于何种原因,我都会遇到以下错误: 以下是我对

  • 问题内容: 我试图在Swift中使用JSONDecoder将JSON转换为Structs,所以我编写了所有Structs,将它们修改了几个小时,但它仍然给我这个错误。我不知道是否有办法查看给出此信息的行。我将在下面发布我的struct,并在其后发布Json File链接。 完整的错误描述是: typeMismatch(Swift.Dictionary ,Swift.DecodingError.Co