{-# LANGUAGE FlexibleInstances #-}
module Musicology.MidiNumInstances where

import Musicology.Pitch

instance Num (Pitch MidiInterval) where
  fromInteger :: Integer -> Pitch MidiInterval
fromInteger = forall a. a -> Pitch a
Pitch forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => Integer -> a
fromInteger

instance Num (Pitch MidiIC) where
  fromInteger :: Integer -> Pitch MidiIC
fromInteger = forall a. a -> Pitch a
Pitch forall b c a. (b -> c) -> (a -> b) -> a -> c
. MidiInterval -> MidiIC
mic forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => Integer -> a
fromInteger

instance Num MidiIC where
  fromInteger :: Integer -> MidiIC
fromInteger = MidiInterval -> MidiIC
mic forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => Integer -> a
fromInteger
  (MidiIC MidiInterval
a) + :: MidiIC -> MidiIC -> MidiIC
+ (MidiIC MidiInterval
b) = MidiInterval -> MidiIC
mic forall a b. (a -> b) -> a -> b
$ MidiInterval
aforall a. Num a => a -> a -> a
+MidiInterval
b
  (MidiIC MidiInterval
a) - :: MidiIC -> MidiIC -> MidiIC
- (MidiIC MidiInterval
b) = MidiInterval -> MidiIC
mic forall a b. (a -> b) -> a -> b
$ MidiInterval
aforall a. Num a => a -> a -> a
-MidiInterval
b
  (MidiIC MidiInterval
a) * :: MidiIC -> MidiIC -> MidiIC
* (MidiIC MidiInterval
b) = MidiInterval -> MidiIC
mic forall a b. (a -> b) -> a -> b
$ MidiInterval
aforall a. Num a => a -> a -> a
*MidiInterval
b -- never use this one!
  negate :: MidiIC -> MidiIC
negate (MidiIC MidiInterval
i) = MidiInterval -> MidiIC
mic (-MidiInterval
i)
  abs :: MidiIC -> MidiIC
abs = forall a. a -> a
id
  signum :: MidiIC -> MidiIC
signum (MidiIC MidiInterval
i) = MidiInterval -> MidiIC
mic forall a b. (a -> b) -> a -> b
$ forall a. Num a => a -> a
signum MidiInterval
i