@@ -50,6 +50,7 @@ module Streamly.Streams.StreamK.Type
@@ -550,6 +551,30 @@ foldrSMShared = foldrSMWith foldStreamShared
551-------------------------------------------------------------------------------
552-------------------------------------------------------------------------------
554+{-# INLINE_NORMAL build #-}
555+build :: IsStream t => forall a. (forall b. (a -> b -> b) -> b -> b) -> t m a
558+{-# RULES "foldrM/build"
559+ forall k z (g :: forall b. (a -> b -> b) -> b -> b).
560+ foldrM k z (build g) = g k z #-}
562+{-# RULES "foldrS/build"
563+ forall k z (g :: forall b. (a -> b -> b) -> b -> b).
564+ foldrS k z (build g) = g k z #-}
566+{-# RULES "foldrS/cons/build"
567+ forall k z x (g :: forall b. (a -> b -> b) -> b -> b).
568+ foldrS k z (x `cons` build g) = k x (g k z) #-}
570+{-# RULES "foldrSShared/build"
571+ forall k z (g :: forall b. (a -> b -> b) -> b -> b).
572+ foldrSShared k z (build g) = g k z #-}
574+{-# RULES "foldrSShared/cons/build"
575+ forall k z x (g :: forall b. (a -> b -> b) -> b -> b).
576+ foldrSShared k z (x `cons` build g) = k x (g k z) #-}
553-- build a stream by applying cons and nil to a build function
578-- build a stream by applying cons and nil to a build function
554{-# INLINE_NORMAL buildS #-}
579{-# INLINE_NORMAL buildS #-}
555buildS :: IsStream t => ((a -> t m a -> t m a) -> t m a -> t m a) -> t m a
580buildS :: IsStream t => ((a -> t m a -> t m a) -> t m a -> t m a) -> t m a