packages feed

Hoed-0.3.3: examples/Salary.hs

{-# LANGUAGE DeriveGeneric #-}
import Debug.Hoed.Pure

avgSalary :: [Employee] -> Float
f         :: [Employee] -> Float
avg       :: Float -> Float -> Employee -> Float

------------------------------------------------------------
-- defective computation of avarage salary (always 0.0)

data Employee = Employee {getName :: String, getSalary :: Float} deriving Generic

avgSalary es = foldl (avg 1.0) 0.0 es
-- avgSalary es = foldl (avg (f es)) 0.0 es
f es = toFloat (1 `div` (length es))
avg' x acc (Employee _ s) = acc + (x * s)

instance Observable Employee
-- avgSalary = observe "avgSalary" avgSalary'
-- f = observe "f" f'
avg = observe "avg" avg'

------------------------------------------------------------
-- properties

newtype Positive a = Positive {getPositive :: a} deriving Show

prop_avgSalaryPositive :: [Positive Float] -> Bool
prop_avgSalaryPositive ss = avgSalary (map mkEmployee ss) > 0.0
  where mkEmployee (Positive s) = Employee "X" s

------------------------------------------------------------

main = testO prop_avgSalaryPositive ss
  where ss = [Positive 3000.0, Positive 1800.0]
        employees = [Employee "Aafje" 3000, Employee "Ben" 2000]

toFloat :: Int -> Float
toFloat = fromInteger . toInteger