diff --git a/LanguageExt.Core/Async/AsyncEnumerable/AsyncEnumberable.Extensions.cs b/LanguageExt.Core/Async/AsyncEnumerable/AsyncEnumberable.Extensions.cs
index b30240426..67c9f75a9 100644
--- a/LanguageExt.Core/Async/AsyncEnumerable/AsyncEnumberable.Extensions.cs
+++ b/LanguageExt.Core/Async/AsyncEnumerable/AsyncEnumberable.Extensions.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Collections.Generic;
 using LanguageExt.Traits;
diff --git a/LanguageExt.Core/DataTypes/Range/Range.cs b/LanguageExt.Core/DataTypes/Range/Range.cs
index b74dd7a2f..0fdf062b9 100644
--- a/LanguageExt.Core/DataTypes/Range/Range.cs
+++ b/LanguageExt.Core/DataTypes/Range/Range.cs
@@ -1,4 +1,6 @@
-using LanguageExt.Traits;
+#pragma warning disable LX_StreamT
+
+using LanguageExt.Traits;
 using System;
 using System.Collections.Generic;
 using System.Collections;
diff --git a/LanguageExt.Core/Effects/IO/Free/IOMap.cs b/LanguageExt.Core/Effects/IO/Free/IOMap.cs
new file mode 100644
index 000000000..ee7729333
--- /dev/null
+++ b/LanguageExt.Core/Effects/IO/Free/IOMap.cs
@@ -0,0 +1,27 @@
+/*
+using System;
+using LanguageExt.DSL;
+using LanguageExt.Traits;
+
+namespace LanguageExt;
+
+record IOMap<A, B>(IO<A> Value, Func<A, B> F) : IO<B>
+{
+    public override IO<C> Map<C>(Func<B, C> f) =>
+        new IOMap<A, C>(Value, x => f(F(x)));
+
+    public override IO<C> Bind<C>(Func<B, K<IO, C>> f) =>
+        new IOMap<A, K<IO, C>>(Value, x => f(F(x)).As()).Bind(x => x);
+
+    public override IO<C> ApplyBack<C>(K<IO, Func<B, C>> mf) =>
+        mf switch
+        {
+            IOPure<Func<B, C>> (var f)       => new IOMap<A, C>(Value, x => f(F(x))),
+            IOPureAsync<Func<B, C>> (var tf) => new IOMap<A, IO<C>>(Value, x => IO.pureAsync(tf.Map(f => f(F(x))))).Bind(x => x),  
+            IOFail<Func<B, C>> (var v)       => new IOFail<C>(v),
+            IOBind<Func<B, C>> (var f)       => new IOBind<C>(f.Map(x => x.Apply(this).As())),
+            IOCatch<Func<B, C>> mc           => Value.Bind(a => IO.pure(F(a)).ApplyBack(mc)),
+            _                                => throw new InvalidOperationException()
+        };
+}
+*/
diff --git a/LanguageExt.Core/Effects/IO/IO.Extensions.cs b/LanguageExt.Core/Effects/IO/IO.Extensions.cs
index 7911ff679..82d805bb3 100644
--- a/LanguageExt.Core/Effects/IO/IO.Extensions.cs
+++ b/LanguageExt.Core/Effects/IO/IO.Extensions.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Diagnostics.Contracts;
 using System.Runtime.CompilerServices;
diff --git a/LanguageExt.Core/Effects/IO/IO.Module.cs b/LanguageExt.Core/Effects/IO/IO.Module.cs
index fc8159662..ca2387942 100644
--- a/LanguageExt.Core/Effects/IO/IO.Module.cs
+++ b/LanguageExt.Core/Effects/IO/IO.Module.cs
@@ -20,6 +20,15 @@ public partial class IO
     public static IO<A> pure<A>(A value) =>
         IO<A>.Pure(value);
     
+    /// <summary>
+    /// Lift a pure value into an IO computation
+    /// </summary>
+    /// <param name="value">value</param>
+    /// <typeparam name="A">Bound value type</typeparam>
+    /// <returns>IO in a success state.  Always yields the lifted value.</returns>
+    internal static IO<A> pureAsync<A>(Task<A> value) =>
+        new IOPureAsync<A>(value);
+    
     /// <summary>
     /// Put the IO into a failure state
     /// </summary>
diff --git a/LanguageExt.Core/Effects/IO/IO.Prelude.cs b/LanguageExt.Core/Effects/IO/IO.Prelude.cs
index 223e7dd77..05aa6f285 100644
--- a/LanguageExt.Core/Effects/IO/IO.Prelude.cs
+++ b/LanguageExt.Core/Effects/IO/IO.Prelude.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Diagnostics.Contracts;
 using System.Runtime.CompilerServices;
diff --git a/LanguageExt.Core/Effects/Prelude.cs b/LanguageExt.Core/Effects/Prelude.cs
index 68b3b4274..b084603e9 100644
--- a/LanguageExt.Core/Effects/Prelude.cs
+++ b/LanguageExt.Core/Effects/Prelude.cs
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using LanguageExt.Traits;
 
 namespace LanguageExt;
diff --git a/LanguageExt.Core/Effects/Source/Source.cs b/LanguageExt.Core/Effects/Source/Source.cs
index 82bbed6ea..fcdadc4f2 100644
--- a/LanguageExt.Core/Effects/Source/Source.cs
+++ b/LanguageExt.Core/Effects/Source/Source.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Collections.Concurrent;
 using System.Threading;
diff --git a/LanguageExt.Core/Effects/Source/Sub.cs b/LanguageExt.Core/Effects/Source/Sub.cs
index b704f4de5..fb8e62405 100644
--- a/LanguageExt.Core/Effects/Source/Sub.cs
+++ b/LanguageExt.Core/Effects/Source/Sub.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.MapApply.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.MapApply.cs
index a2ea85260..55fd27c9c 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.MapApply.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.MapApply.cs
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using LanguageExt.Traits;
 
 namespace LanguageExt;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.cs
index d3d5af0e4..c29fab753 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Extensions.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Collections.Generic;
 using System.Linq;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Module.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Module.cs
index 69015d6b4..200f1688b 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Module.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Module.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt.Traits;
 using System.Collections.Generic;
 
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Monad.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Monad.cs
index dbe950c7b..529753585 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Monad.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Monad.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using System.Collections.Generic;
 using LanguageExt.Traits;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.cs
index 7cc33c5f4..2230cf9f6 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt.Traits;
 
 namespace LanguageExt;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.mapapply.cs b/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.mapapply.cs
index 38dd9fad1..0c73c5439 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.mapapply.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.Prelude.mapapply.cs
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using LanguageExt.Traits;
 
 namespace LanguageExt;
diff --git a/LanguageExt.Core/Effects/StreamT/StreamT.cs b/LanguageExt.Core/Effects/StreamT/StreamT.cs
index 39c91f692..284919fc6 100644
--- a/LanguageExt.Core/Effects/StreamT/StreamT.cs
+++ b/LanguageExt.Core/Effects/StreamT/StreamT.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 using System.Threading;
 using System.Threading.Tasks;
 using static LanguageExt.Prelude;
@@ -11,6 +12,7 @@ namespace LanguageExt;
 /// <summary>
 /// Lazy sequence monad transformer
 /// </summary>
+[Experimental("LX_StreamT")]
 public record StreamT<M, A>(Func<K<M, MList<A>>>  runListT) :
     K<StreamT<M>, A>,
     Monoid<StreamT<M, A>>
diff --git a/LanguageExt.Core/Immutable Collections/Arr/Arr.cs b/LanguageExt.Core/Immutable Collections/Arr/Arr.cs
index bf9ba0948..800868aa8 100644
--- a/LanguageExt.Core/Immutable Collections/Arr/Arr.cs	
+++ b/LanguageExt.Core/Immutable Collections/Arr/Arr.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Linq;
 using System.Collections;
 using System.Collections.Generic;
diff --git a/LanguageExt.Core/Immutable Collections/Iterable/Iterable.cs b/LanguageExt.Core/Immutable Collections/Iterable/Iterable.cs
index 7a1a18858..2cd846404 100644
--- a/LanguageExt.Core/Immutable Collections/Iterable/Iterable.cs	
+++ b/LanguageExt.Core/Immutable Collections/Iterable/Iterable.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics.Contracts;
diff --git a/LanguageExt.Core/Immutable Collections/List/Lst.cs b/LanguageExt.Core/Immutable Collections/List/Lst.cs
index e54e2bc9c..095ae9d97 100644
--- a/LanguageExt.Core/Immutable Collections/List/Lst.cs	
+++ b/LanguageExt.Core/Immutable Collections/List/Lst.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Linq;
 using System.Collections;
 using System.Collections.Generic;
diff --git a/LanguageExt.Core/Immutable Collections/Seq/Seq.cs b/LanguageExt.Core/Immutable Collections/Seq/Seq.cs
index 901d1ae3e..02c7e63f8 100644
--- a/LanguageExt.Core/Immutable Collections/Seq/Seq.cs	
+++ b/LanguageExt.Core/Immutable Collections/Seq/Seq.cs	
@@ -1,4 +1,6 @@
-#pragma warning disable CS0693 // Type parameter has the same name as the type parameter from outer type
+#pragma warning disable LX_StreamT
+
+#pragma warning disable CS0693 // Type parameter has the same name as the type parameter from outer type
 
 using System;
 using System.Collections;
diff --git a/LanguageExt.Core/Immutable Collections/Set/Set.cs b/LanguageExt.Core/Immutable Collections/Set/Set.cs
index e0ebde04b..7b0efdfaa 100644
--- a/LanguageExt.Core/Immutable Collections/Set/Set.cs	
+++ b/LanguageExt.Core/Immutable Collections/Set/Set.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Collections.Generic;
 using System.Collections;
 using static LanguageExt.Prelude;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/Either/Either.cs b/LanguageExt.Core/Monads/Alternative Monads/Either/Either.cs
index c8b7c4dcb..70df2ee54 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/Either/Either.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/Either/Either.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using static LanguageExt.Prelude;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/EitherT/EitherT.cs b/LanguageExt.Core/Monads/Alternative Monads/EitherT/EitherT.cs
index b8feaec94..3b8ff74d4 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/EitherT/EitherT.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/EitherT/EitherT.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Diagnostics.Contracts;
 using System.Runtime.CompilerServices;
 using LanguageExt.Traits;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/Fin/Fin.cs b/LanguageExt.Core/Monads/Alternative Monads/Fin/Fin.cs
index 8a1d11b73..3b4df9045 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/Fin/Fin.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/Fin/Fin.cs	
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using System;
 using LanguageExt.Common;
 using LanguageExt.Traits;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/FinT/FinT.cs b/LanguageExt.Core/Monads/Alternative Monads/FinT/FinT.cs
index 20d1619b1..8f370180b 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/FinT/FinT.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/FinT/FinT.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Diagnostics.Contracts;
 using LanguageExt.Common;
 using LanguageExt.Traits;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/Option/Option.cs b/LanguageExt.Core/Monads/Alternative Monads/Option/Option.cs
index c6ac029d5..c33b859e0 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/Option/Option.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/Option/Option.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Linq;
 using System.Collections.Generic;
 using static LanguageExt.Prelude;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/OptionT/OptionT.cs b/LanguageExt.Core/Monads/Alternative Monads/OptionT/OptionT.cs
index 18ccd60c1..c882909be 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/OptionT/OptionT.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/OptionT/OptionT.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Diagnostics.Contracts;
 using System.IO;
 using System.Runtime.CompilerServices;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/Validation/Validation.cs b/LanguageExt.Core/Monads/Alternative Monads/Validation/Validation.cs
index e6cee28f5..f92a8e281 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/Validation/Validation.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/Validation/Validation.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Collections.Generic;
 using static LanguageExt.Prelude;
 using System.Diagnostics.Contracts;
diff --git a/LanguageExt.Core/Monads/Alternative Monads/ValidationT/ValidationT.cs b/LanguageExt.Core/Monads/Alternative Monads/ValidationT/ValidationT.cs
index 1148f6026..8522d76f2 100644
--- a/LanguageExt.Core/Monads/Alternative Monads/ValidationT/ValidationT.cs	
+++ b/LanguageExt.Core/Monads/Alternative Monads/ValidationT/ValidationT.cs	
@@ -1,4 +1,6 @@
-using System;
+#pragma warning disable LX_StreamT
+
+using System;
 using System.Diagnostics.Contracts;
 using System.Runtime.CompilerServices;
 using LanguageExt.Common;
diff --git a/LanguageExt.Tests/TraitTests/ApplicativeLawTests.cs b/LanguageExt.Tests/TraitTests/ApplicativeLawTests.cs
index aa902319c..c6611b183 100644
--- a/LanguageExt.Tests/TraitTests/ApplicativeLawTests.cs
+++ b/LanguageExt.Tests/TraitTests/ApplicativeLawTests.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using Xunit;
 namespace LanguageExt.Tests.TraitTests;
 
diff --git a/LanguageExt.Tests/TraitTests/FunctorLawTests.cs b/LanguageExt.Tests/TraitTests/FunctorLawTests.cs
index f661c1f8a..51e59e735 100644
--- a/LanguageExt.Tests/TraitTests/FunctorLawTests.cs
+++ b/LanguageExt.Tests/TraitTests/FunctorLawTests.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using Xunit;
 using LanguageExt.Common;
 namespace LanguageExt.Tests.TraitTests;
diff --git a/LanguageExt.Tests/TraitTests/MonadLawsTest.cs b/LanguageExt.Tests/TraitTests/MonadLawsTest.cs
index 04bf9d8a8..edc3f64ce 100644
--- a/LanguageExt.Tests/TraitTests/MonadLawsTest.cs
+++ b/LanguageExt.Tests/TraitTests/MonadLawsTest.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using Xunit;
 
 namespace LanguageExt.Tests.TraitTests;
diff --git a/Samples/Streams/CountForever.cs b/Samples/Streams/CountForever.cs
index cbd11bd67..2468499f7 100644
--- a/Samples/Streams/CountForever.cs
+++ b/Samples/Streams/CountForever.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static LanguageExt.Prelude;
 using static Streams.Console;
diff --git a/Samples/Streams/CountForeverAsync.cs b/Samples/Streams/CountForeverAsync.cs
index 26724c06e..05b895d1e 100644
--- a/Samples/Streams/CountForeverAsync.cs
+++ b/Samples/Streams/CountForeverAsync.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static LanguageExt.Prelude;
 using static Streams.Console;
diff --git a/Samples/Streams/Folding.cs b/Samples/Streams/Folding.cs
index f43d08e72..d8abe06b8 100644
--- a/Samples/Streams/Folding.cs
+++ b/Samples/Streams/Folding.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static Streams.Console;
 using static LanguageExt.Prelude;
diff --git a/Samples/Streams/Grouping.cs b/Samples/Streams/Grouping.cs
index 3e7c37cba..146771d3b 100644
--- a/Samples/Streams/Grouping.cs
+++ b/Samples/Streams/Grouping.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static LanguageExt.Prelude;
 using static Streams.Console;
diff --git a/Samples/Streams/HeadsAndTails.cs b/Samples/Streams/HeadsAndTails.cs
index dfa633982..9632b2f62 100644
--- a/Samples/Streams/HeadsAndTails.cs
+++ b/Samples/Streams/HeadsAndTails.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static LanguageExt.Prelude;
 using static Streams.Console;
diff --git a/Samples/Streams/Merging.cs b/Samples/Streams/Merging.cs
index 065828999..faf3d6b67 100644
--- a/Samples/Streams/Merging.cs
+++ b/Samples/Streams/Merging.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static Streams.Console;
 using static LanguageExt.Prelude;
diff --git a/Samples/Streams/OptionalItems.cs b/Samples/Streams/OptionalItems.cs
index 2e227fb2e..0dd40e5ad 100644
--- a/Samples/Streams/OptionalItems.cs
+++ b/Samples/Streams/OptionalItems.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static LanguageExt.Prelude;
 
diff --git a/Samples/Streams/SourceStream.cs b/Samples/Streams/SourceStream.cs
index 93fe0f732..a6a5e555e 100644
--- a/Samples/Streams/SourceStream.cs
+++ b/Samples/Streams/SourceStream.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using LanguageExt.Common;
 using static Streams.Console;
diff --git a/Samples/Streams/SumOfSquares.cs b/Samples/Streams/SumOfSquares.cs
index c7195740d..71ec13bec 100644
--- a/Samples/Streams/SumOfSquares.cs
+++ b/Samples/Streams/SumOfSquares.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using LanguageExt.Common;
 using LanguageExt.Traits;
diff --git a/Samples/Streams/Zipping.cs b/Samples/Streams/Zipping.cs
index e4539125f..586890875 100644
--- a/Samples/Streams/Zipping.cs
+++ b/Samples/Streams/Zipping.cs
@@ -1,3 +1,5 @@
+#pragma warning disable LX_StreamT
+
 using LanguageExt;
 using static Streams.Console;
 using static LanguageExt.Prelude;