packages feed

moonlight-linalg-0.1.0.0: src-spectral/Moonlight/LinAlg/Pure/Spectral/Request.hs

{-# LANGUAGE GADTs #-}
{-# LANGUAGE StrictData #-}

module Moonlight.LinAlg.Pure.Spectral.Request
  ( EigenRequest (..),
  )
where

import Data.Kind (Type)
import Data.Vector.Unboxed qualified as U
import Moonlight.LinAlg.Pure.Krylov.Config (PositiveCount)
import Moonlight.LinAlg.Pure.Krylov.Selection (SpectrumEnd)
import Moonlight.LinAlg.Pure.Spectral.Result (Eigenpairs)
import Prelude

type EigenRequest :: Type -> Type
data EigenRequest result where
  EigenvaluesRequest ::
    !SpectrumEnd ->
    !PositiveCount ->
    EigenRequest (U.Vector Double)
  EigenpairsRequest ::
    !SpectrumEnd ->
    !PositiveCount ->
    EigenRequest Eigenpairs