{-# LANGUAGE GADTSyntax #-} {-# LANGUAGE TypeInType #-} {-# OPTIONS_GHC -Wall #-} module Streaming.FFT.Types ( -- * types Signal(..) , Bin(..) , Transform(..) , Window(..) ) where import Data.Kind (Type) import Control.Monad.Primitive import Data.Complex import Data.Primitive.PrimArray import Prelude hiding (undefined, Rational) -- | A 'Window' is a mutable primitive array of 'Complex' values, -- over which we compute the DFT. newtype Window :: (Type -> Type) -> Type -> Type where Window :: MutablePrimArray (PrimState m) (Complex e) -> Window m e -- | A 'Transform' is a Mutable primitive array of 'Complex' values, -- the result of taking the DFT of a 'Window'. newtype Transform :: (Type -> Type) -> Type -> Type where Transform :: MutablePrimArray (PrimState m) (Complex e) -> Transform m e -- | Your signal size. newtype Signal e = Signal Int -- | Your bin size. newtype Bin e = Bin Int