module FRP.Peakachu (
Event, escanl, efilter,
edrop, ereturn, ezip, ezip'
) where
import FRP.Peakachu.Internal (Event, escanl, efilter)
import Data.Monoid (mappend, mempty)
ezip :: Event a -> Event b -> Event (Maybe a, Maybe b)
ezip as bs =
escanl step (Nothing, Nothing) $ fmap Left as `mappend` fmap Right bs
where
step (_, r) (Left l) = (Just l, r)
step (l, _) (Right r) = (l, Just r)
ezip' :: Event a -> Event b -> Event (a, b)
ezip' as bs =
fmap m . efilter f $ ezip as bs
where
f (Just _, Just _) = True
f _ = False
m (Just l, Just r) = (l, r)
m _ = undefined
ereturn :: a -> Event a
ereturn x = escanl (const id) x mempty
edrop :: Integral i => i -> Event a -> Event a
edrop count =
fmap snd .
efilter ((== 0) . fst) .
escanl step (count+1, undefined)
where
step (0, _) x = (0, x)
step (i, _) x = (i1, x)