haskell 在哪里保存状态?

where does haskell save state?

人们说 Haskell 没有状态。 我认为实用程序需要状态。 haskell 也是如此。 Haskell没有保存状态的变量,haskell如何保存状态? 我认为 haskell 在 head 中使用 lambda 变量作为内存!

    someAction1 >>= \result1 ->
  ( someAction2 >>= \result2 ->
  ( someAction3 >>= \result3 -> return (somef result1 result2 result3)))

最后一个函数somef可以通过result1,result2,result3得到someAction1,someAction2,someAction3的result

lambda变量(result1, result2, result3) 的作用类似于MEMORY(保存状态的变量)。

“Haskell doesn't have a state”并不意味着实际程序不需要状态概念。

lambda代数之所以能做到图灵完备一样,是因为lambda变量的作用域。因为 lambda 变量像内存一样使用,所以通用编程是可能的。

我做对了吗?

“人们说 Haskell 没有状态。”

Haskell 确实有状态,只是大多数时候它非常短暂。以下面的函数为例。

mysum :: [Integer] -> Integer
mysum [] = 0
mysum (x:xs) = x + mysum xs

此函数正在抓取状态,值保存在堆栈中。仅有的两个长期值是输入列表和输出值。如果这个函数被另一个函数调用,那么即使这些值也不是长期的。

do 符号看起来有状态,但这只是语法糖。看起来命令式的代码变成了一系列链接的 lambda 表达式。 Desugaring do-notation for Monads

需要 long-term 状态的地方,可以将其存储在 State Monad 或数据库中。