diff --git a/Redcraft.Utility/Source/Public/Range/AllView.h b/Redcraft.Utility/Source/Public/Range/AllView.h
index 85f89d4..aafe707 100644
--- a/Redcraft.Utility/Source/Public/Range/AllView.h
+++ b/Redcraft.Utility/Source/Public/Range/AllView.h
@@ -2,6 +2,7 @@
 
 #include "CoreTypes.h"
 #include "Range/View.h"
+#include "Range/Pipe.h"
 #include "Range/Utility.h"
 #include "Templates/Utility.h"
 #include "TypeTraits/TypeTraits.h"
@@ -148,6 +149,15 @@ NODISCARD FORCEINLINE constexpr auto All(R&& InRange)
 	else return TOwningView(Forward<R>(InRange));
 }
 
+/** Creates A view adapter that includes all elements of a range. */
+NODISCARD FORCEINLINE constexpr auto All()
+{
+	return TAdaptorClosure([]<CViewableRange R> requires (requires { All(DeclVal<R&&>()); }) (R && Base)
+	{
+		return All(Forward<R>(Base));
+	});
+}
+
 /** A view adapter that includes all elements of a range. */
 template <CViewableRange R>
 using TAllView = decltype(Range::All(DeclVal<R>()));
diff --git a/Redcraft.Utility/Source/Public/Range/FilterView.h b/Redcraft.Utility/Source/Public/Range/FilterView.h
index 04d6af6..247740d 100644
--- a/Redcraft.Utility/Source/Public/Range/FilterView.h
+++ b/Redcraft.Utility/Source/Public/Range/FilterView.h
@@ -2,6 +2,7 @@
 
 #include "CoreTypes.h"
 #include "Range/View.h"
+#include "Range/Pipe.h"
 #include "Range/Utility.h"
 #include "Range/AllView.h"
 #include "Memory/Address.h"
@@ -174,10 +175,10 @@ NODISCARD FORCEINLINE constexpr auto Filter(R&& Base, Pred&& Predicate)
 template <typename Pred>
 NODISCARD FORCEINLINE constexpr auto Filter(Pred&& Predicate)
 {
-	return [&Predicate]<CViewableRange R> requires (requires { TFilterView(DeclVal<R&&>(), DeclVal<Pred&&>()); }) (R&& Base)
+	return TAdaptorClosure([&Predicate]<CViewableRange R> requires (requires { Range::Filter(DeclVal<R&&>(), DeclVal<Pred&&>()); }) (R&& Base)
 	{
-		return TFilterView(Forward<R>(Base), Forward<Pred>(Predicate));
-	};
+		return Range::Filter(Forward<R>(Base), Forward<Pred>(Predicate));
+	});
 }
 
 NAMESPACE_END(Range)
diff --git a/Redcraft.Utility/Source/Public/Range/Pipe.h b/Redcraft.Utility/Source/Public/Range/Pipe.h
new file mode 100644
index 0000000..17a40e0
--- /dev/null
+++ b/Redcraft.Utility/Source/Public/Range/Pipe.h
@@ -0,0 +1,119 @@
+#pragma once
+
+#include "CoreTypes.h"
+#include "Range/Utility.h"
+#include "Templates/Invoke.h"
+#include "Templates/Utility.h"
+#include "TypeTraits/TypeTraits.h"
+
+NAMESPACE_REDCRAFT_BEGIN
+NAMESPACE_MODULE_BEGIN(Redcraft)
+NAMESPACE_MODULE_BEGIN(Utility)
+
+NAMESPACE_BEGIN(Range)
+
+/**
+ * An interface class template for defining a range adaptor closure.
+ * When the derived class has a unary operator() with range as a reference and is not itself a range,
+ * the derived class is the range adaptor closure type and its objects can participate in pipe operations.
+ * Specify, the unary operator() with any reference qualifier or cv-qualifier must be defined and has same effect.
+ * Not directly instantiable.
+ */
+template <CObject D> requires (CSameAs<D, TRemoveCV<D>>)
+class IAdaptorClosure { };
+
+/** An adaptor closure helper that wraps a callable object. */
+template <CMoveConstructible F>
+class TAdaptorClosure : public IAdaptorClosure<TAdaptorClosure<F>>
+{
+public:
+
+	FORCEINLINE constexpr explicit TAdaptorClosure(F InClosure) : Closure(MoveTemp(InClosure)) { }
+
+	template <typename R> requires (CInvocable<F&, R>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) &
+	{
+		return Invoke(Closure, Forward<R>(Range));
+	}
+
+	template <typename R> requires (CInvocable<const F&, R>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) const&
+	{
+		return Invoke(Closure, Forward<R>(Range));
+	}
+
+	template <typename R> requires (CInvocable<F&&, R>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) &&
+	{
+		return Invoke(MoveTemp(Closure), Forward<R>(Range));
+	}
+
+	template <typename R> requires (CInvocable<const F&&, R>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) const&&
+	{
+		return Invoke(MoveTemp(Closure), Forward<R>(Range));
+	}
+
+private:
+
+	NO_UNIQUE_ADDRESS F Closure;
+
+};
+
+/** A pipe closure that wraps two adaptor closures. */
+template <CMoveConstructible T, CMoveConstructible U> requires (CDerivedFrom<T, IAdaptorClosure<T>> && CDerivedFrom<U, IAdaptorClosure<U>>)
+class TPipeClosure final : public IAdaptorClosure<TPipeClosure<T, U>>
+{
+public:
+
+	FORCEINLINE constexpr explicit TPipeClosure(T InLHS, U InRHS) : LHS(MoveTemp(InLHS)), RHS(MoveTemp(InRHS)) { }
+
+	template <typename R> requires (CInvocable<T&, R> && CInvocable<U&, TInvokeResult<T&, R>>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) &
+	{
+		return Forward<R>(Range) | LHS | RHS;
+	}
+
+	template <typename R> requires (CInvocable<const T&, R> && CInvocable<const U&, TInvokeResult<const T&, R>>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) const&
+	{
+		return Forward<R>(Range) | LHS | RHS;
+	}
+
+	template <typename R> requires (CInvocable<T&&, R> && CInvocable<U&&, TInvokeResult<T&&, R>>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) &&
+	{
+		return Forward<R>(Range) | MoveTemp(LHS) | MoveTemp(RHS);
+	}
+
+	template <typename R> requires (CInvocable<const T&&, R> && CInvocable<const U&&, TInvokeResult<const T&&, R>>)
+	NODISCARD FORCEINLINE constexpr auto operator()(R&& Range) const&&
+	{
+		return Forward<R>(Range) | MoveTemp(LHS) | MoveTemp(RHS);
+	}
+
+private:
+
+	NO_UNIQUE_ADDRESS T LHS;
+	NO_UNIQUE_ADDRESS U RHS;
+};
+
+/** Apply the range adaptor closure to the range. */
+template <CRange R, CInvocable<R> T> requires (CDerivedFrom<TRemoveCVRef<T>, IAdaptorClosure<TRemoveCVRef<T>>>)
+NODISCARD FORCEINLINE constexpr auto operator|(R&& Range, T&& Closure)
+{
+	return Invoke(Forward<T>(Closure), Forward<R>(Range));
+}
+
+/** Create a pipe closure that wraps two adaptor closures. */
+template <CMoveConstructible T, CMoveConstructible U> requires (CDerivedFrom<T, IAdaptorClosure<T>> && CDerivedFrom<U, IAdaptorClosure<U>>)
+NODISCARD FORCEINLINE constexpr auto operator|(T LHS, U RHS)
+{
+	return TPipeClosure(MoveTemp(LHS), MoveTemp(RHS));
+}
+
+NAMESPACE_END(Range)
+
+NAMESPACE_MODULE_END(Utility)
+NAMESPACE_MODULE_END(Redcraft)
+NAMESPACE_REDCRAFT_END
diff --git a/Redcraft.Utility/Source/Public/Range/Range.h b/Redcraft.Utility/Source/Public/Range/Range.h
index 2d9fd4d..7327058 100644
--- a/Redcraft.Utility/Source/Public/Range/Range.h
+++ b/Redcraft.Utility/Source/Public/Range/Range.h
@@ -4,6 +4,7 @@
 #include "Range/Utility.h"
 #include "Range/View.h"
 #include "Range/Factory.h"
+#include "Range/Pipe.h"
 #include "Range/AllView.h"
 #include "Range/FilterView.h"
 #include "Range/TransformView.h"
diff --git a/Redcraft.Utility/Source/Public/Range/TransformView.h b/Redcraft.Utility/Source/Public/Range/TransformView.h
index fc20199..5c3eb19 100644
--- a/Redcraft.Utility/Source/Public/Range/TransformView.h
+++ b/Redcraft.Utility/Source/Public/Range/TransformView.h
@@ -2,6 +2,7 @@
 
 #include "CoreTypes.h"
 #include "Range/View.h"
+#include "Range/Pipe.h"
 #include "Range/Utility.h"
 #include "Range/AllView.h"
 #include "Templates/Invoke.h"
@@ -221,10 +222,10 @@ NODISCARD FORCEINLINE constexpr auto Transform(R&& Base, F&& Func)
 template <typename F>
 NODISCARD FORCEINLINE constexpr auto Transform(F&& Func)
 {
-	return [&Func]<CViewableRange R> requires (requires { TTransformView(DeclVal<R&&>(), DeclVal<F&&>()); }) (R&& Base)
+	return TAdaptorClosure([&Func]<CViewableRange R> requires (requires { Range::Transform(DeclVal<R&&>(), DeclVal<F&&>()); }) (R&& Base)
 	{
-		return TTransformView(Forward<R>(Base), Forward<F>(Func));
-	};
+		return Range::Transform(Forward<R>(Base), Forward<F>(Func));
+	});
 }
 
 NAMESPACE_END(Range)
diff --git a/Redcraft.Utility/Source/Public/Range/View.h b/Redcraft.Utility/Source/Public/Range/View.h
index 7757582..3fd9546 100644
--- a/Redcraft.Utility/Source/Public/Range/View.h
+++ b/Redcraft.Utility/Source/Public/Range/View.h
@@ -11,7 +11,7 @@ NAMESPACE_MODULE_BEGIN(Utility)
 
 NAMESPACE_BEGIN(Range)
 
-/** A helper class template for defining a view interface. Not directly instantiable. */
+/** An interface class template for defining a view. Not directly instantiable. */
 template <CClass T> requires (CSameAs<T, TRemoveCV<T>>)
 class IBasicViewInterface
 {