Index: src/libcfa/containers/maybe
===================================================================
--- src/libcfa/containers/maybe	(revision cc386695abad2e671edae2a0ba953403b7f4d480)
+++ src/libcfa/containers/maybe	(revision f851015ecd95c0117ab0f9f411341c46c9bc35ba)
@@ -8,7 +8,7 @@
 //
 // Author           : Andrew Beach
-// Created On       : Wed May 25 14:43:00 2017
+// Created On       : Wed May 24 14:43:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Apr 25 16:58:00 2017
+// Last Modified On : Thr May 25 16:36:00 2017
 // Update Count     : 1
 //
@@ -41,4 +41,7 @@
 
 forall(otype T)
+maybe(T) ?=?(maybe(T) * this, maybe(T) other);
+
+forall(otype T)
 bool ?!=?(maybe(T) this, zero_t);
 
@@ -55,3 +58,9 @@
 T get(maybe(T) * this);
 
+forall(otype T)
+void set(maybe(T) * this, T value);
+
+forall(otype T)
+void set_none(maybe(T) * this);
+
 #endif // MAYBE_H
Index: src/libcfa/containers/maybe.c
===================================================================
--- src/libcfa/containers/maybe.c	(revision cc386695abad2e671edae2a0ba953403b7f4d480)
+++ src/libcfa/containers/maybe.c	(revision f851015ecd95c0117ab0f9f411341c46c9bc35ba)
@@ -8,7 +8,7 @@
 //
 // Author           : Andrew Beach
-// Created On       : Wed May 25 15:40:00 2017
+// Created On       : Wed May 24 15:40:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed May 25 17:00:00 2017
+// Last Modified On : Thr May 25 15:24:00 2017
 // Update Count     : 1
 //
@@ -26,5 +26,5 @@
 void ?{}(maybe(T) * this, T value) {
 	this->has_value = true;
-	this->value = value;
+	(&this->value){value};
 }
 
@@ -33,5 +33,18 @@
 	this->has_value = other.has_value;
 	if (other.has_value) {
-		this->value = other.value;
+		(&this->value){other.value};
+	}
+}
+
+forall(otype T)
+maybe(T) ?=?(maybe(T) * this, maybe(T) that) {
+	if (this->has_value & that.has_value) {
+		this->value = that.value;
+	} else if (this->has_value) {
+		^(&this->value){};
+		this->has_value = false;
+	} else if (that.has_value) {
+		this->has_value = true;
+		(&this->value){that.value};
 	}
 }
@@ -46,5 +59,5 @@
 forall(otype T)
 bool ?!=?(maybe(T) this, zero_t) {
-	return !this.has_value;
+	return this.has_value;
 }
 
@@ -69,2 +82,20 @@
 	return this->value;
 }
+
+forall(otype T)
+void set(maybe(T) * this, T value) {
+	if (this->has_value) {
+		this->value = value;
+	} else {
+		this->has_value = true;
+		(&this->value){value};
+	}
+}
+
+forall(otype T)
+void set_none(maybe(T) * this) {
+	if (this->has_value) {
+		this->has_value = false;
+		^(&this->value){};
+	}
+}
Index: src/libcfa/containers/result
===================================================================
--- src/libcfa/containers/result	(revision cc386695abad2e671edae2a0ba953403b7f4d480)
+++ src/libcfa/containers/result	(revision f851015ecd95c0117ab0f9f411341c46c9bc35ba)
@@ -8,7 +8,7 @@
 //
 // Author           : Andrew Beach
-// Created On       : Wed May 25 14:45:00 2017
+// Created On       : Wed May 24 14:45:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed May 25 16:57:00 2017
+// Last Modified On : Thr May 25 16:39:00 2017
 // Update Count     : 1
 //
@@ -50,4 +50,7 @@
 
 forall(otype T, otype E)
+result(T, E) ?=?(result(T, E) * this, result(T, E) other);
+
+forall(otype T, otype E)
 bool ?!=?(result(T, E) this, zero_t);
 
@@ -67,3 +70,9 @@
 E get_error(result(T, E) * this);
 
+forall(otype T, otype E)
+void set(result(T, E) * this, T value);
+
+forall(otype T, otype E)
+void set_error(result(T, E) * this, E error);
+
 #endif // RESULT_H
Index: src/libcfa/containers/result.c
===================================================================
--- src/libcfa/containers/result.c	(revision cc386695abad2e671edae2a0ba953403b7f4d480)
+++ src/libcfa/containers/result.c	(revision f851015ecd95c0117ab0f9f411341c46c9bc35ba)
@@ -8,7 +8,7 @@
 //
 // Author           : Andrew Beach
-// Created On       : Wed May 25 15:40:00 2017
+// Created On       : Wed May 24 15:40:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed May 25 17:02:00 2017
+// Last Modified On : Thr May 25 15:27:00 2017
 // Update Count     : 1
 //
@@ -27,5 +27,5 @@
 void ?{}(result(T, E) * this, one_t, T value) {
 	this->has_value = true;
-	this->value = value;
+	(&this->value){value};
 }
 
@@ -33,5 +33,5 @@
 void ?{}(result(T, E) * this, zero_t, E error) {
 	this->has_value = false;
-	this->error = error;
+	(&this->error){error};
 }
 
@@ -40,7 +40,24 @@
 	this->has_value = other.has_value;
 	if (other.has_value) {
-		this->value = other.value;
+		(&this->value){other.value};
 	} else {
-		this->error = other.error;
+		(&this->error){other.error};
+	}
+}
+
+forall(otype T, otype E)
+result(T, E) ?=?(result(T, E) * this, result(T, E) that) {
+	if (this->has_value & that.has_value) {
+		this->value = that.value;
+	} else if (this->has_value) {
+		^(&this->value){};
+		this->has_value = false;
+		(&this->error){that.error};
+	} else if (that.has_value) {
+		^(&this->error){};
+		this->has_value = true;
+		(&this->value){that.value};
+	} else {
+		this->error = that.error;
 	}
 }
@@ -86,2 +103,24 @@
 	return this->error;
 }
+
+forall(otype T, otype E)
+void set(result(T, E) * this, T value) {
+	if (this->has_value) {
+		this->value = value;
+	} else {
+		^(&this->error){};
+		this->has_value = true;
+		(&this->value){value};
+	}
+}
+
+forall(otype T, otype E)
+void set_error(result(T, E) * this, E error) {
+	if (this->has_value) {
+		^(&this->value){};
+		this->has_value = false;
+		(&this->error){error};
+	} else {
+		this->error = error;
+	}
+}
Index: tools/cfa.nanorc
===================================================================
--- tools/cfa.nanorc	(revision cc386695abad2e671edae2a0ba953403b7f4d480)
+++ tools/cfa.nanorc	(revision f851015ecd95c0117ab0f9f411341c46c9bc35ba)
@@ -12,5 +12,5 @@
 color green "\<(float|double|bool|char|int|short|long|sizeof|enum|void|auto)\>"
 color green "\<(static|const|struct|union|typedef|extern|(un)?signed|inline)\>"
-color green "\<((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\>"
+color green "\<((s?size)|one|zero|((u_?)?int(8|16|32|64|ptr)))_t\>"
 
 # Declarations
@@ -39,4 +39,6 @@
 
 # Values
+# Booleans
+color blue "\<(true|false)\>"
 # Characters
 color brightmagenta "'([^'\]|(\\")|(\\['abfnrtv\\]))'"
