module Data.Pass.Accelerated ( Accelerated(..) ) where import Data.Pass.Type import Data.Pass.Calc import Data.Pass.L import Data.Pass.Fun import Data.Pass.Thrist import Data.Pass.Robust import Data.Pass.Accelerant class Accelerated k where mean :: k Double Double total :: k Double Double largest :: k Double Double smallest :: k Double Double midrange :: k Double Double instance Accelerated L where mean = robust LMean total = robust LTotal largest = robust (NthLargest 0) smallest = robust (NthSmallest 0) midrange = robust ((-1) :* NthSmallest 0 :+ NthLargest 0) instance Accelerated k => Accelerated (Fun k) where mean = Fun mean total = Fun total largest = Fun largest smallest = Fun smallest midrange = Fun midrange instance Accelerated k => Accelerated (Thrist k) where mean = mean :- Nil total = total :- Nil largest = largest :- Nil smallest = smallest :- Nil midrange = midrange :- Nil instance Accelerant k => Accelerated (Calc k) where mean = meanPass :& Stop total = totalPass :& Stop largest = largestPass :& Stop smallest = smallestPass :& Stop midrange = midrangePass :& Stop instance Accelerant k => Accelerated (Pass k) where mean = meanPass total = totalPass largest = largestPass smallest = smallestPass midrange = midrangePass