RxHaskell-0.1: Signal/Event.hs
{-# LANGUAGE Safe #-}
module Signal.Event ( Event(..)
) where
import Control.Exception
-- | Represents an event that a signal might send.
--
-- Signals may send any number of 'NextEvent's, followed by one 'ErrorEvent' /or/ 'CompletedEvent'.
data Event v = NextEvent v -- ^ A value @v@ in the monad.
| ErrorEvent IOException -- ^ Sent when an error or exception occurs in the signal. Outside of the monad.
| CompletedEvent -- ^ Sent when the signal completes successfully. Outside of the monad.
instance Eq v => Eq (Event v) where
(NextEvent v) == (NextEvent v') = v == v'
(ErrorEvent e) == (ErrorEvent e') = e == e'
CompletedEvent == CompletedEvent = True
_ == _ = False
instance Show v => Show (Event v) where
show (NextEvent v) = "NextEvent " ++ show v
show (ErrorEvent e) = "ErrorEvent " ++ show e
show CompletedEvent = "CompletedEvent"