{-# language Safe #-}

module D10.Safe.Arithmetic where

import D10.Safe (D10, d10Int, intMod10)

import qualified Prelude as P

-- | Addition modulo 10.
--
-- >>> D2 + D3
-- D5
--
-- >>> D6 + D7
-- D3

(+) :: D10 -> D10 -> D10
D10
x + :: D10 -> D10 -> D10
+ D10
y = Int -> D10
intMod10 (D10 -> Int
d10Int D10
x Int -> Int -> Int
forall a. Num a => a -> a -> a
P.+ D10 -> Int
d10Int D10
y)

-- | Subtraction modulo 10.
--
-- >>> D7 - D5
-- D2
--
-- >>> D3 - D7
-- D6

(-) :: D10 -> D10 -> D10
D10
x - :: D10 -> D10 -> D10
- D10
y = Int -> D10
intMod10 (D10 -> Int
d10Int D10
x Int -> Int -> Int
forall a. Num a => a -> a -> a
P.- D10 -> Int
d10Int D10
y)

-- | Multiplication modulo 10.
--
-- >>> D2 * D4
-- D8
-- >>> D7 * D8
-- D6

(*) :: D10 -> D10 -> D10
D10
x * :: D10 -> D10 -> D10
* D10
y = Int -> D10
intMod10 (D10 -> Int
d10Int D10
x Int -> Int -> Int
forall a. Num a => a -> a -> a
P.* D10 -> Int
d10Int D10
y)