27 releases
0.1.12 | Mar 4, 2024 |
---|---|
0.1.11 | Nov 13, 2023 |
0.1.9 | Sep 21, 2023 |
0.1.7 | Jun 16, 2023 |
0.0.8 | May 29, 2023 |
#256 in Data structures
620 downloads per month
Used in 3 crates
205KB
5K
SLoC
The AST Nodes of Valkyrie Language
教你一个编程语言, 高亮的时候使用 scala 的高亮
这个语言是这样定义类的
# 定义一个类 A
class A { }
# 定义一个类 B 继承 A
class B(A) { }
你觉得多继承应该怎么写?
这个语言中这样定义代数效应
class Logging {
level: Integer
message: String
effect debug(s: String): Self / Pure {
new Self { level: 0, message: s }
}
effect print(s: String): Self / Pure {
new Self { level: 1, message: s }
}
effect error(s: String): Self / Pure {
new Self { level: 2, message: s }
}
effect fatal(s: String): Self / Pure {
new Self { level: 3, message: s }
}
}
使用 raise 激发代数效应, 使用 try catch 语句处理代数效应.
try {
raise Logging::debug("hello")
}
.catch {
case Logging(level, message):
std::io::std_err().lock().write(message)
}
这段代码应该怎么编译
if a {
yield 1
print 2
}
yield 2
let yield1 = {
print(2)
if_break()
}
let if_break = {
yield2()
}
let yield2 = {
ret()
}
类型签名部分分为 Type / Effect
两部分, 两者都可以省略, Type 的默认值为 Unit, Effect 的默认值为 Pure.
Dependencies
~6.5MB
~107K SLoC