39 lines
793 B
Idris
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
|