]> gitweb.michael.orlitzky.com - numerical-analysis.git/commitdiff
Begin work on a simple 2-tuple type.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 14 Oct 2012 02:36:49 +0000 (22:36 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 14 Oct 2012 02:36:49 +0000 (22:36 -0400)
src/TwoTuple.hs [new file with mode: 0644]

diff --git a/src/TwoTuple.hs b/src/TwoTuple.hs
new file mode 100644 (file)
index 0000000..8493114
--- /dev/null
@@ -0,0 +1,31 @@
+-- | Implement ordered pairs all over again for fun (and to make sure
+--   that we can manipulate them algebraically).
+--
+module TwoTuple
+where
+
+data TwoTuple a = TwoTuple a a
+  deriving (Eq, Show)
+
+instance Functor TwoTuple where
+  f `fmap` (TwoTuple x1 y1) = TwoTuple (f x1) (f y1)
+
+
+instance Num a => Num (TwoTuple a) where
+  -- Standard componentwise addition.
+  (TwoTuple x1 y1) + (TwoTuple x2 y2) =
+    TwoTuple (x1 + x2) (y1 + y2)
+
+  -- Standard componentwise subtraction.
+  (TwoTuple x1 y1) - (TwoTuple x2 y2) =
+    TwoTuple (x1 - x2) (y1 - y2)
+
+  -- Left undefined to prevent mistakes. One sane definition
+  -- would be componentwise multiplication.
+  (*) _ _ = error "multiplication of vectors is undefined"
+
+  abs _ = error "absolute value of vectors is undefined"
+
+  signum _ = error "signum of vectors is undefined"
+
+  fromInteger x = TwoTuple (fromInteger x) (fromInteger x)