We use runEffect to run our Pipe:
main :: IO ()
main = do
runEffect $ naturalsUntil 10 >-> intToStr >-> fancyPrint
Note that runEffect requires an Effect, which is a self-contained Proxy with no inputs or outputs:
runEffect :: Monad m => Effect m r -> m r
type Effect = Proxy X () () X
(where X is the empty type, also known as Void).