{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}

module Arpack.Options where

import Data.Complex

data Which :: * -> * where
  LM :: Which a
  SM :: Which a
  LR :: Which a
  SR :: Which a
  LI :: Which (Complex a)
  SI :: Which (Complex a)

showWhich :: Which a -> String
showWhich LM = "LM"
showWhich SM = "SM"
showWhich LR = "LR"
showWhich SR = "SR"
showWhich LI = "LI"
showWhich SI = "SI"

data Options a = Options { which :: !(Which a)
                         , number :: {-# UNPACK #-} !Int
                         , maxIterations :: !(Maybe Int)
                         }
