numidr/src/Data/NumIdr/Scalar.idr

39 lines
793 B
Idris

module Data.NumIdr.Scalar
import Data.Vect
import Data.NumIdr.Interfaces
import Data.NumIdr.PrimArray
import public Data.NumIdr.Array
%default total
||| Scalars are `Array []`, the unique 0-rank array type. They hold a single value.
||| Scalars are not particularly useful as data structures, but they are
||| included here anyways.
public export
Scalar : Type -> Type
Scalar = Array []
||| Convert a value to a scalar.
export
scalar : a -> Scalar a
scalar x = fromVect _ [x]
||| Unwrap the single value from a scalar.
export
unwrap : Scalar a -> a
unwrap = index 0 . getPrim
export
Num a => Mult (Scalar a) (Scalar a) (Scalar a) where
(*.) = (*)
export
Num a => MultMonoid (Scalar a) where
identity = scalar 1
export
Fractional a => MultGroup (Scalar a) where
inverse = recip