{-# OPTIONS_GHC -Wno-orphans #-} module Data.SegTree.RangeUpdateRangeMin where import Data.Coerce import Data.Monoid.LastMin import Data.SegTree import Data.Semigroup instance (Ord a, Bounded a) => AsSemigroupEndo (Dual (LastMin a)) (Min a) where sendo :: Dual (LastMin a) -> Min a -> Min a sendo Dual (LastMin a) x Min a y | Dual (LastMin a) x Dual (LastMin a) -> Dual (LastMin a) -> Bool forall a. Eq a => a -> a -> Bool == Dual (LastMin a) forall a. Monoid a => a mempty = Min a y | Bool otherwise = Dual (LastMin a) -> Min a forall a b. Coercible a b => a -> b coerce Dual (LastMin a) x {-# INLINE sendo #-}