module LiveCoding.Cell.Util.Internal where

-- | Helper for 'onChange'.
whenDifferent :: (Eq p, Monad m) => (p -> p -> a -> m b) -> (p, p, a) -> m (Maybe b)
whenDifferent :: forall p (m :: * -> *) a b.
(Eq p, Monad m) =>
(p -> p -> a -> m b) -> (p, p, a) -> m (Maybe b)
whenDifferent p -> p -> a -> m b
action (p
pOld, p
pNew, a
a)
  | p
pOld forall a. Eq a => a -> a -> Bool
== p
pNew = forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> p -> p -> a -> m b
action p
pOld p
pNew a
a
  | Bool
otherwise = forall (m :: * -> *) a. Monad m => a -> m a
return forall a. Maybe a
Nothing