You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中返回State Integer ()与State Int Integer的函数差异

State类型区别与报错解析

先搞懂State s a的本质:它其实是个包装过的函数,签名是s -> (a, s)。第一个类型参数s是状态的类型,第二个a是计算结束后返回值的类型。

两种State类型的区别

  • State Integer ():
    • 状态是Integer类型,意味着你操作的状态值是整数
    • 返回值是()(空元组,Haskell里表示“无意义返回值”),这类函数通常只负责修改状态,不需要返回额外数据
  • State Int Integer:
    • 状态是Int类型,操作的状态值是Int整数
    • 返回值是Integer类型,这类函数既要处理状态,最后还要返回一个Integer类型的结果

你的报错原因

你写func :: Integer -> State Integer ()时用pure 0,问题出在pure的作用:在State里,pure x会生成一个不修改状态、直接返回x的计算。而你的返回值类型要求是(),但你传给pure的是0(Num类型的值),Haskell找不到()的Num实例,自然报错。

如果你的需求是把输入的Integer设置为新状态,应该用put函数:

func :: Integer -> State Integer ()
func n = put n

如果只是想生成一个啥也不做的State计算,就返回pure ():

func :: Integer -> State Integer ()
func _ = pure ()

内容的提问来源于stack exchange,提问作者amduck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:00:55