4 import Prelude hiding (LT)
34 | Sum Cardinal Cardinal
35 | Difference Cardinal Cardinal
36 | Product Cardinal Cardinal
37 | Quotient Cardinal Cardinal
40 instance Num Cardinal where
42 x - y = Difference x y
44 negate x = Product (Scalar (-1)) x
47 fromInteger x = Scalar (fromIntegral x)
49 instance Fractional Cardinal where
51 recip x = Quotient (Scalar 1) x
52 fromRational x = Scalar (fromRational x)
54 -- | Rotate a cardinal direction counter-clockwise about the x-axis.
55 ccwx :: Cardinal -> Cardinal
83 ccwx (Scalar s) = (Scalar s)
84 ccwx (Sum c0 c1) = Sum (ccwx c0) (ccwx c1)
85 ccwx (Difference c0 c1) = Difference (ccwx c0) (ccwx c1)
86 ccwx (Product c0 c1) = Product (ccwx c0) (ccwx c1)
87 ccwx (Quotient c0 c1) = Quotient (ccwx c0) (ccwx c1)
89 -- | Rotate a cardinal direction clockwise about the x-axis.
90 cwx :: Cardinal -> Cardinal
91 cwx = ccwx . ccwx . ccwx
94 -- | Rotate a cardinal direction counter-clockwise about the y-axis.
95 -- TODO: Fix these; they still use the x-axis values.
96 ccwy :: Cardinal -> Cardinal
124 ccwy (Scalar s) = (Scalar s)
125 ccwy (Sum c0 c1) = Sum (ccwy c0) (ccwy c1)
126 ccwy (Difference c0 c1) = Difference (ccwy c0) (ccwy c1)
127 ccwy (Product c0 c1) = Product (ccwy c0) (ccwy c1)
128 ccwy (Quotient c0 c1) = Quotient (ccwy c0) (ccwy c1)
130 -- | Rotate a cardinal direction clockwise about the x-axis.
131 cwy :: Cardinal -> Cardinal
132 cwy = ccwy . ccwy . ccwy