diff --git a/dust-lang/src/abstract_tree/mod.rs b/dust-lang/src/abstract_tree/mod.rs
index aafbdfd..1365f35 100644
--- a/dust-lang/src/abstract_tree/mod.rs
+++ b/dust-lang/src/abstract_tree/mod.rs
@@ -17,6 +17,7 @@ pub mod structure_definition;
pub mod r#type;
pub mod type_alias;
pub mod type_constructor;
+pub mod r#use;
pub mod value_node;
pub mod r#while;
@@ -45,6 +46,7 @@ pub use self::{
r#as::As,
r#loop::Loop,
r#type::Type,
+ r#use::Use,
r#while::While,
statement::Statement,
structure_definition::StructureDefinition,
diff --git a/dust-lang/src/abstract_tree/use.rs b/dust-lang/src/abstract_tree/use.rs
new file mode 100644
index 0000000..583f023
--- /dev/null
+++ b/dust-lang/src/abstract_tree/use.rs
@@ -0,0 +1,48 @@
+use std::{fs::read_to_string, path::Path};
+
+use serde::{Deserialize, Serialize};
+
+use crate::{
+ context::Context,
+ error::{RuntimeError, ValidationError},
+ lexer::{self, lex},
+ Type,
+};
+
+use super::{AbstractNode, Evaluation};
+
+#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
+pub struct Use {
+ path: String,
+}
+
+impl AbstractNode for Use {
+ fn define_types(&self, context: &Context) -> Result<(), ValidationError> {
+ Ok(())
+ }
+
+ fn validate(&self, context: &Context, manage_memory: bool) -> Result<(), ValidationError> {
+ if Path::new(&self.path).exists() {
+ Ok(())
+ } else {
+ todo!()
+ }
+ }
+
+ fn evaluate(
+ self,
+ context: &Context,
+ manage_memory: bool,
+ ) -> Result