0 | module Data.NumIdr.Scalar
 1 |
 2 | import Data.Vect
 3 | import Data.NumIdr.Interfaces
 4 | import Data.NumIdr.PrimArray
 5 | import public Data.NumIdr.Array
 6 |
 7 | %default total
 8 |
 9 | ||| Scalars are `Array []`, the unique 0-rank array type. They hold a single value.
10 | ||| Scalars are not particularly useful as data structures, but they are
11 | ||| included here anyways.
12 | public export
13 | Scalar : Type -> Type
14 | Scalar = Array []
15 |
16 |
17 | ||| Convert a value to a scalar.
18 | export
19 | scalar : a -> Scalar a
20 | scalar x = fromVect _ [x]
21 |
22 | ||| Unwrap the single value from a scalar.
23 | export
24 | unwrap : Scalar a -> a
25 | unwrap s = s !# []
26 |
27 |
28 | export
29 | Num a => Mult (Scalar a) (Scalar a) (Scalar a) where
30 |   (*.) = (*)
31 |
32 | export
33 | Num a => MultMonoid (Scalar a) where
34 |   identity = scalar 1
35 |
36 | export
37 | Fractional a => MultGroup (Scalar a) where
38 |   inverse = recip
39 |