rings-0.0.2.1: src/Data/Double/Instance.hs
{-# LANGUAGE CPP #-}
module Data.Double.Instance where
import Data.Semiring
import Foreign.C.Types (CDouble(..))
import Prelude (Monoid(..), Semigroup(..), Double)
import qualified Prelude as N (Num(..))
#define deriveSemigroup(ty) \
instance Semigroup (ty) where { \
(<>) = (N.+) \
; {-# INLINE (<>) #-} \
}
#define deriveMonoid(ty) \
instance Monoid (ty) where { \
mempty = 0 \
}
#define deriveSemiring(ty) \
instance Semiring (ty) where { \
(><) = (N.*) \
; fromBoolean = fromBooleanDef 1 \
; {-# INLINE (><) #-} \
; {-# INLINE fromBoolean #-} \
}
deriveSemigroup(Double)
deriveSemigroup(CDouble)
deriveMonoid(Double)
deriveMonoid(CDouble)
deriveSemiring(Double)
deriveSemiring(CDouble)