module Quant.Models.Processes (
    ProcessSpec (..)
  , normal
  , lognormal
) where

data ProcessSpec = ProcessSpec {-# UNPACK #-} !Double !Double !Double

normal :: ProcessSpec -> Double -> Double -> Double
normal (ProcessSpec initVal r t) vol normRand = initVal + vol * normRand + r * t

lognormal :: ProcessSpec -> Double -> Double -> Double 
lognormal (ProcessSpec initVal r t) vol normRand = initVal * exp ( g + sig * normRand )
  where
    g   = (r - vol*vol/2) * t
    sig = vol * sqrt t

--cir :: ProcessSpec -> Double 
--cir (ProcessSpec initVal r t) vol normRand