【发布时间】:2021-12-30 11:55:27
【问题描述】:
我不是 Haskell 方面的专家。这个问题并不完全是 Haskell 问题,但我知道 Haskell 的人会更好地理解我想要实现的目标。
所以我正在构建一种动态语言,我希望它是纯粹的……完全纯粹的。 (支持 IO 效果,我已经知道原因,但这不是这个问题的一部分)
另外,我希望它具有某种形式的多态性,所以我正在玩弄添加类支持的想法。
(另外,语言中的所有内容都应该是一个表达式,所以是的,没有语句)
在探索这个想法时,我最终意识到,为了使其具有引用透明性,类表达式也应该能够被替换。
类表达式的主要功能之一是检查某个值是否是它的实例。
所以
val Person =class {...}
val person1 =Person(blabla)
Person.instantiated(person1) // returns true
// Equivalent to
class {...}.
instantiated(class{...}(blabla))
然而!最后一部分毫无意义……感觉不对,好像我创建了两个不同的类
所以!
有没有这样的表达方式
val expr = <<expression>>
expr == expr // true
但是<<expression>> == <<expression>> 是假的?
使用纯语言?
我觉得我问的是等价于问newtypeHaskell 语句是否可以变成表达式
【问题讨论】:
-
0/0 == 0/0是任何支持浮点数的语言的规范示例;因为根据 Haskell 遵循的 IEEE-754 语义,NaN不等于自身。 -
这取决于
==的含义。当我阅读“==”时,我希望它具有等价关系的属性。等价关系的基本属性之一是自反性:a == a对应于基础集合的每个元素a。 -
您是不是说 两个 不同的表达式
a和b可能评估为相同的 值? -
“类表达式的主要功能之一是检查某个值是否是它的实例。” 呃! 我的意思是,是的,这在实践中确实发生了很多,但很多人会认为这完全违背了正确的 OO 精神。 - 无论如何,我真的不明白这与问题有何关系......
-
必须承认这是一个很难问的问题......我很难措辞,就像我正在努力寻找答案一样
标签: class haskell functional-programming expression statements