| 
					
				 | 
			
			
				@@ -0,0 +1,20 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type Left<T> = { tag: "left", value: T }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type Right<T> = { tag: "right", value: T }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export type Either<L, R> = Left<L> | Right<R>; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export function left<T> (value: T): Left<T> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return {tag: "left", value: value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export function right<T> (value: T): Right<T> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return {tag: "right", value: value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export function match<T, L, R> (input: Either<L, R>, left: (l: L) => T, right: (right: R) => T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  switch(input.tag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "left": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return left(input.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "right": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return right(input.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |