packages feed

algebraic-0.1.0.2: src/Math/Metric/Minkowski.hs

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}

module Math.Metric.Minkowski where

import Math.Metric.Metric        (Metric(..), MetricCoord(..))
import Math.Coordinate.Cartesian (Cartesian(..), Point2(..))


data Minkowski a = Minkowski a deriving Show


--------------------------------------------------------------------------------
-- Instances
--------------------------------------------------------------------------------

instance MetricCoord (Minkowski a) Cartesian where
    metricCoord _ = Cartesian

instance (Floating a, a~b) => Metric (Minkowski b) (Point2 a) a where
    distanceBase (Minkowski p) (Point2 x1 y1) (Point2 x2 y2) = ((abs $ x1-x2)**p + (abs $ y1-y2)**p)**(1/p)