packages feed

semiring-0.3: Data/Semiring/Max.hs

{-# 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)