clash-prelude-0.5: src/CLaSH/Class/Num.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module CLaSH.Class.Num where
import GHC.TypeLits
-- | Implicitly adding or subtracting values of two different (sub-)types.
class Add a b where
type AResult a b
plus :: a -> b -> AResult a b
minus :: a -> b -> AResult a b
-- | Implicitly multiplying values of two different (sub-)types.
class Mult a b where
type MResult a b
mult :: a -> b -> MResult a b
-- | Coerce a value to be represented by a different number of bits
class Resize f where
resize :: (KnownNat a, KnownNat b) => f a -> f b