{-|
Module      : FRP.Netwire.Input.Util
Description : Utility functions used but not exported by netwire-input.
Copyright   : (c) Bradley Hardy, 2015
License     : MIT
Maintainer  : Krajcevski@gmail.com
Stability   : experimental
Portability : POSIX

This module contains utility functions used but not exported by
'FRP.Netwire.Input'.

-}
module FRP.Netwire.Input.Util where

import Prelude hiding (id, (.))
import Control.Wire

-- | Take an wire that produces an arbitrary event, and change the contents
-- of those events to instead be the same as the input value at the time of
-- the event's occurrence.
eventToId :: Monad m => Wire s e m a (Event b) -> Wire s e m a (Event a)
eventToId wire = uncurry (fmap . const) <$> (id &&& wire)