 	}
 }
 
+extension ArrowOf : CustomReflectable {
+	public func customMirror() -> Mirror {
+		return Mirror(self, children: [
+			"types": "\(T.self) -> \(U.self)",
+			"currentMap": self._impl.table,
+		])
+	}
+}
+
 /// Generates two isomorphic Swift function from T to U and back again.
 public struct IsoOf<T : protocol<Hashable, CoArbitrary, Arbitrary>, U : protocol<Equatable, CoArbitrary, Arbitrary>> : Arbitrary, CustomStringConvertible {
 	private let _impl : IsoOfImpl<T, U>


	public static var arbitrary : Gen<IsoOf<T, U>> {
		return IsoOfImpl<T, U>.arbitrary.fmap(IsoOf.init)
	}
}


}

/// Generates pointers of varying size of random values of type T.
public struct PointerOf<T : Arbitrary> : Arbitrary, CustomStringConvertible {
	private let _impl : PointerOfImpl<T>

	public var getPointer : UnsafePointer<T> {
		return UnsafePointer(self._impl.ptr)
	}

	public var size : Int {
		return self._impl.size
	}

	public var description : String {
		return self._impl.description
	}

	public static var arbitrary : Gen<PointerOf<T>> {
		return PointerOfImpl.arbitrary.fmap(PointerOf.init)
	}
}

