packages feed

Hastructure-0.45.0: src/Revolving.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GADTs #-}


module Revolving
  ( RevolvingPool(..)
  , lookupAssetAvailable
  )
  where

import GHC.Generics
import Language.Haskell.TH
import Data.Aeson hiding (json)
import qualified Data.Text as T
import qualified Cashflow as CF
import Data.Aeson.TH
import Data.Aeson.Types
import Data.Hashable
import Data.Fixed
import Data.List
import Types

import AssetClass.AssetBase


data RevolvingPool = ConstantAsset [AssetUnion]          -- ^ Assets in revolving pool stays constant after being bought
                   | StaticAsset [AssetUnion]            -- ^ Assets in revolving pool will decrease afeter being bought
                   | AssetCurve [TsPoint [AssetUnion]]   -- ^ Assets are changing by dates
                   deriving (Show,Generic)


lookupAssetAvailable :: RevolvingPool -> Date -> [AssetUnion]
lookupAssetAvailable (ConstantAsset aus) _ = aus
lookupAssetAvailable (StaticAsset aus) _ = aus
lookupAssetAvailable (AssetCurve ausCurve) d 
  = case find (\(TsPoint _d _) -> d > _d) (reverse ausCurve)  of 
      Just (TsPoint _d v) -> v
      Nothing -> [] 



$(deriveJSON defaultOptions ''RevolvingPool)