netwire-4.0.7: Control/Wire/Prefab/List.hs
-- |
-- Module: Control.Wire.Prefab.List
-- Copyright: (c) 2012 Ertugrul Soeylemez
-- License: BSD3
-- Maintainer: Ertugrul Soeylemez <es@ertes.de>
--
-- Wires from lists.
module Control.Wire.Prefab.List
( -- * Wires from lists
cycleW,
list
)
where
import Control.Applicative
import Control.Monad.Fix
import Control.Wire.Wire
import Data.Monoid
-- | Produce the values in the given list cycling forever.
--
-- * Inhibits: when the argument list is empty.
cycleW :: (Monad m, Monoid e) => [b] -> Wire e m a b
cycleW [] = empty
cycleW xs = fix (\again -> foldr cons again xs)
-- | Produce the values in the given list and then inhibit forever.
--
-- * Inhibits: when the list is exhausted.
list :: (Monad m, Monoid e) => [b] -> Wire e m a b
list = foldr cons empty