internal static Behavior <T> SwitchBImpl <T, T2>(this Behavior <T2> bba)
            where T2 : Behavior <T>
        {
            return(TransactionInternal.Apply(
                       (trans1, _) =>
            {
                Lazy <T> za = bba.SampleLazyImpl().MapImpl(ba => ba.SampleImpl());
                Stream <T> @out = new Stream <T>(bba.KeepListenersAlive);
                MutableListener currentListener = new MutableListener();

                void H(TransactionInternal trans2, Behavior <T> ba)
                {
                    IListener cl = currentListener;
                    cl.Unlisten();

                    currentListener.SetListenerImpl(ba.Value(trans2).Listen(@out.Node, trans2, @out.Send, false));
                }

                IListener l1 = bba.Value(trans1).Listen(@out.Node, trans1, H, false);
                return @out.UnsafeAttachListener(l1)
                .UnsafeAttachListener(currentListener)
                .HoldLazyInternal(trans1, za);
            },
                       false));
        }
 public static Lazy <T> SampleLazy <T>(this Behavior <T> b) => b.SampleLazyImpl();