{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Data.Semiring.Max where import Data.Semiring newtype Max n = Max n deriving (Eq, Show, Ord, Bounded, Num) instance (Num n) => Multiplicative (Max n) where one = 0 times = (+) instance (Ord n, Bounded n) =>Monoid (Max n) where mempty = minBound mappend = (max) instance (Bounded n, Ord n, Num n) => Semiring (Max n) instance (Bounded n, Ord n, Num n) => WeightedSemiring (Max n)