> -- | Module: Pipes.Maybe > -- Description: Utilities for conversion between finite and infinite pipes > -- Copyright: © 2015 Patryk Zadarnowski <pat@jantar.org> > -- License: BSD3 > -- Maintainer: pat@jantar.org > -- Stability: experimental > -- Portability: portable > -- > -- Conversion between finite and infinite pipe using the 'Either' type.
> module Pipes.Maybe ( > catWhileJust, extendWithNothing > ) where
> import Control.Monad > import Pipes.Core
> -- | A pipe that receives and forwards all 'Just' values in its input > -- up to the first occurence of 'Nothing'.
> catWhileJust :: Monad m => Pipe (Maybe a) a m () > catWhileJust = go > where go = request () >>= maybe (return ()) (respond >=> const go)
> -- | Converts a finite pipe into an infinite pipe, in which the original > -- pipe's values are followed by an infinite stream of 'Nothing'.
> extendWithNothing :: Monad m => Pipe a b m r -> Pipe a (Maybe b) m r' > extendWithNothing p = (p //> respond . Just) >> forever (respond Nothing)