feat: usable?
This commit is contained in:
@@ -1,33 +1,45 @@
|
||||
use crate::vm::Env;
|
||||
use crate::ty::internal::{Const, Value, AttrSet, PrimOp};
|
||||
use crate::ty::common::Symbol;
|
||||
use std::sync::Arc;
|
||||
|
||||
pub fn env() -> Env {
|
||||
let mut env = Env::empty();
|
||||
use crate::ty::common::Symbol;
|
||||
use crate::ty::internal::{AttrSet, Const, PrimOp, Value};
|
||||
use crate::vm::Env;
|
||||
|
||||
pub fn env() -> Arc<Env> {
|
||||
let env = Arc::new(Env::empty());
|
||||
env.insert(Symbol::from("true"), Value::Const(Const::Bool(true)));
|
||||
env.insert(Symbol::from("false"), Value::Const(Const::Bool(false)));
|
||||
|
||||
let primops = [
|
||||
PrimOp::new("add", 2, |args| {
|
||||
PrimOp::new("add", 2, |_, args| {
|
||||
let [first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.add(second)
|
||||
}),
|
||||
PrimOp::new("sub", 2, |args| {
|
||||
PrimOp::new("sub", 2, |_, args| {
|
||||
let [first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.add(second.neg())
|
||||
}),
|
||||
PrimOp::new("mul", 2, |args| {
|
||||
PrimOp::new("mul", 2, |_, args| {
|
||||
let [first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.mul(second)
|
||||
}),
|
||||
PrimOp::new("div", 2, |args| {
|
||||
PrimOp::new("div", 2, |_, args| {
|
||||
let [first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.div(second)
|
||||
}),
|
||||
PrimOp::new("lessThan", 2, |args| {
|
||||
PrimOp::new("lessThan", 2, |_, args| {
|
||||
let [first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.lt(second)
|
||||
})
|
||||
}),
|
||||
PrimOp::new("seq", 2, |vm, args| {
|
||||
let [mut first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.force(vm).unwrap();
|
||||
second
|
||||
}),
|
||||
PrimOp::new("deepSeq", 2, |vm, args| {
|
||||
let [mut first, second]: [Value; 2] = args.try_into().unwrap();
|
||||
first.force_deep(vm).unwrap();
|
||||
second
|
||||
}),
|
||||
];
|
||||
|
||||
let mut builtins = AttrSet::empty();
|
||||
@@ -42,4 +54,3 @@ pub fn env() -> Env {
|
||||
env.insert(Symbol::from("builtins"), Value::AttrSet(builtins));
|
||||
env
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user