Haskell 是不是支持未绑定的变量?
Posted
技术标签:
【中文标题】Haskell 是不是支持未绑定的变量?【英文标题】:Does Haskell support unbound variables?Haskell 是否支持未绑定的变量? 【发布时间】:2016-01-31 02:13:03 【问题描述】:Haskell 是否支持 unbound variables 中的 Oz programming language 概念?
【问题讨论】:
【参考方案1】:Haskell 仅支持 变量 在(单子)上下文中的值。一旦你看到这些,就会发现像MVar
这样的某些确实可以是空的。
但是,如果您想表示一个值的简单可空性,Maybe a
是一种完美的方法,它与实际值是对可变对象或不可变对象的引用分开。
展开说明:
newIORef :: a -> IO (IORef a)
但是我们可以很容易地这样写newEmptyIORef
:
newEmptyIORef :: IO (IORef (Maybe a))
newEmptyIORef = newIORef Nothing
注意Maybe (IORef a) ≠ IORef (Maybe a)
。
【讨论】:
Haskell 程序可以在程序声明变量后将MVar
绑定到一个值(为变量赋值)吗?我称之为 lazy binding 或 lazy assignment(或 deferred binding 或 assignment)。
@DerekMahar 这是 MVars 的重点,但我不确定这是否是一个很好的例子
@DerekMahar 不。没有定义变量就无法初始化/声明变量。
这里给出的代码示例实际上并没有使用MVar
s(尽管如果你只使用一个线程我猜它是等效的)以上是关于Haskell 是不是支持未绑定的变量?的主要内容,如果未能解决你的问题,请参考以下文章