{-| Module : Multilinear.NForm Description : N-Forms, dot and cross product and determinant Copyright : (c) Artur M. Brodzki, 2018 License : GLP-3 Maintainer : artur@brodzki.org Stability : experimental Portability : Windows/POSIX - This module provides convenient constructors that generates n-forms (tensors with n lower indices with finite or infinite size). - Finitely-dimensional n-forms provide much greater performance than infinitely-dimensional -} module Multilinear.NForm ( -- * Generators Multilinear.NForm.fromIndices, Multilinear.NForm.const ) where import qualified Data.Vector.Unboxed as Unboxed import Multilinear {-| Generate N-form as function of its indices -} fromIndices :: ( Num a, Unboxed.Unbox a, Multilinear t a ) => String -- ^ Indices names (one characted per index) -> [Int] -- ^ Indices sizes -> ([Int] -> a) -- ^ Generator function -> t a -- ^ Generated N-form fromIndices d ds f = Multilinear.fromIndices [] d [] ds $ \[] -> f {-| Generate N-form with all components equal to @v@ -} const :: ( Num a, Unboxed.Unbox a, Multilinear t a ) => String -- ^ Indices names (one characted per index) -> [Int] -- ^ Indices sizes -> a -- ^ N-form elements value -> t a -- ^ Generated N-form const d = Multilinear.const [] d []