Haskell中的指针相等? [英] Pointer equality in Haskell?

查看:25
本文介绍了Haskell中的指针相等?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Haskell 中是否有任何指针质量的概念?== 需要导出 Eq 的东西,我有一些包含 (Value -> IO Value) 的东西,并且既不是 -> 也不是 IO 导出 Eq.

我正在为另一种语言创建一个解释器,它确实具有指针相等性,所以我试图模拟这种行为,同时仍然能够使用 Haskell 函数来模拟闭包.>

示例:我想要一个函数 special 可以做到这一点:

>让 x a = a * 2>让 y = x>特别 xy真的>让 z a = a * 2>特别 x z错误的

解决方案

EDIT:根据您的示例,您可以使用 IO monad 对此进行建模.只需将您的功能分配给 IORefs 并比较它们.

Prelude Data.IORef>z <- newIORef (x -> x)Prelude Data.IORef>y <- newIORef (x -> x)Prelude Data.IORef>z == z真的Prelude Data.IORef>z == y错误的

Is there any notion of pointer quality in Haskell? == requires things to be deriving Eq, and I have something which contains a (Value -> IO Value), and neither -> nor IO derive Eq.

EDIT: I'm creating an interpreter for another language which does have pointer equality, so I'm trying to model this behavior while still being able to use Haskell functions to model closures.

EDIT: Example: I want a function special that would do this:

> let x a = a * 2
> let y = x
> special x y
True
> let z a = a * 2
> special x z
False

解决方案

EDIT: Given your example, you could model this with the IO monad. Just assign your functions to IORefs and compare them.

Prelude Data.IORef> z <- newIORef (x -> x)
Prelude Data.IORef> y <- newIORef (x -> x)
Prelude Data.IORef> z == z
True
Prelude Data.IORef> z == y
False

这篇关于Haskell中的指针相等?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆