dcfM :: Double -> Int -> Double -> Double -> Double
dcfM interestRate growthYears growth termalGrowth = growthValue + terminalValue where
  growthValue  :: Double
  growthValue = sum $ take growthYears $ List.iterate (* (discount * growth)) 1.0
  terminalValue = sum $ take 1000 $ List.iterate (* (discount * termalGrowth)) terminalEarning
  terminalEarning :: Double
  terminalEarning = (discount * growth) ** (fromIntegral growthYears)
  discount :: Double
  discount = 1.0 - interestRate
dcfM :: Double -> Int -> Double -> Double -> Double
dcfM interestRate growthYears growth termalGrowth = growthValue + terminalValue where
  growthValue  :: Double
  growthValue = sum $ take growthYears $ List.iterate (* (discount * growth)) 1.0
  terminalValue = sum $ take 1000 $ List.iterate (* (discount * termalGrowth)) terminalEarning
  terminalEarning :: Double
  terminalEarning = (discount * growth) ** (fromIntegral growthYears)
  discount :: Double
  discount = 1.0 - interestRate
dcfM interestRate growthYears growth termalGrowth = growthValue + terminalValue where
  growthValue  :: Double
  growthValue = sum $ take growthYears $ List.iterate (* (discount * growth)) 1.0
  terminalValue = sum $ take 1000 $ List.iterate (* (discount * termalGrowth)) terminalEarning
  terminalEarning :: Double
  terminalEarning = (discount * growth) ** (fromIntegral growthYears)
  discount :: Double
  discount = 1.0 - interestRate