-
-
--- * Low-dimension vector wrappers.
---
--- These wrappers are instances of 'Vector', so they inherit all of
--- the userful instances defined above. But, they use fixed
--- constructors, so you can pattern match out the individual
--- components.
-
--- | Convenient constructor for 2D vectors.
---
--- Examples:
---
--- >>> import Roots.Simple
--- >>> let h = 0.5 :: Double
--- >>> let g1 (Vn (Vec2D x y)) = 1.0 + h*exp(-(x^2))/(1.0 + y^2)
--- >>> let g2 (Vn (Vec2D x y)) = 0.5 + h*atan(x^2 + y^2)
--- >>> let g u = make2d ((g1 u), (g2 u))
--- >>> let u0 = make2d (1.0, 1.0)
--- >>> let eps = 1/(10^9)
--- >>> fixed_point g eps u0
--- (1.0728549599342185,1.0820591495686167)
---
-data Vec2D a = Vec2D a a
-type instance Dim Vec2D = N2
-instance Vector Vec2D a where
- inspect (Vec2D x y) (Fun f) = f x y
- construct = Fun Vec2D
-
-data Vec3D a = Vec3D a a a
-type instance Dim Vec3D = N3
-instance Vector Vec3D a where
- inspect (Vec3D x y z) (Fun f) = f x y z
- construct = Fun Vec3D
-
-data Vec4D a = Vec4D a a a a
-type instance Dim Vec4D = N4
-instance Vector Vec4D a where
- inspect (Vec4D w x y z) (Fun f) = f w x y z
- construct = Fun Vec4D
-
-
--- | Convenience function for creating 2d vectors.
---
--- Examples:
---
--- >>> let v1 = make2d (1,2)
--- >>> v1
--- (1,2)
--- >>> let Vn (Vec2D x y) = v1
--- >>> (x,y)
--- (1,2)
---
-make2d :: forall a. (a,a) -> Vn Vec2D a
-make2d (x,y) = Vn (Vec2D x y)
-
-
--- | Convenience function for creating 3d vectors.