module example;

import addle;
import lib: A, B, C;

// Can extend types from other modules
bool empty(A a) { return false; }
char front(A a) { return 'a'; }
void popFront(A a) {}

// ...but can't hijack existing methods
char front(C c) { return 'x'; }

unittest {
	import std.range: take, only;
	import std.algorithm: equal;

	A a;
	assert(a.extended.take(3).equal(only('a', 'a', 'a')));
	
	B b;
	assert(b.extended.take(3).equal(only('b', 'b', 'b')));

	C c;
	assert(c.extended.take(3).equal(only('c', 'c', 'c')));
}