{-# LANGUAGE InstanceSigs #-} module Geometry.HCDT.Types where import Data.Hashable (Hashable, hashWithSalt) import Data.IntMap.Strict (IntMap) import Data.List (sort) data Triangle = Triangle Int Int Int deriving (Int -> Triangle -> ShowS [Triangle] -> ShowS Triangle -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Triangle] -> ShowS $cshowList :: [Triangle] -> ShowS show :: Triangle -> String $cshow :: Triangle -> String showsPrec :: Int -> Triangle -> ShowS $cshowsPrec :: Int -> Triangle -> ShowS Show, ReadPrec [Triangle] ReadPrec Triangle Int -> ReadS Triangle ReadS [Triangle] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Triangle] $creadListPrec :: ReadPrec [Triangle] readPrec :: ReadPrec Triangle $creadPrec :: ReadPrec Triangle readList :: ReadS [Triangle] $creadList :: ReadS [Triangle] readsPrec :: Int -> ReadS Triangle $creadsPrec :: Int -> ReadS Triangle Read) instance Eq Triangle where (==) :: Triangle -> Triangle -> Bool Triangle Int i Int j Int k == :: Triangle -> Triangle -> Bool == Triangle Int i' Int j' Int k' = forall a. Ord a => [a] -> [a] sort [Int i, Int j, Int k] forall a. Eq a => a -> a -> Bool == forall a. Ord a => [a] -> [a] sort [Int i', Int j', Int k'] data Edge = Edge Int Int deriving (Int -> Edge -> ShowS [Edge] -> ShowS Edge -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Edge] -> ShowS $cshowList :: [Edge] -> ShowS show :: Edge -> String $cshow :: Edge -> String showsPrec :: Int -> Edge -> ShowS $cshowsPrec :: Int -> Edge -> ShowS Show, ReadPrec [Edge] ReadPrec Edge Int -> ReadS Edge ReadS [Edge] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Edge] $creadListPrec :: ReadPrec [Edge] readPrec :: ReadPrec Edge $creadPrec :: ReadPrec Edge readList :: ReadS [Edge] $creadList :: ReadS [Edge] readsPrec :: Int -> ReadS Edge $creadsPrec :: Int -> ReadS Edge Read) instance Eq Edge where (==) :: Edge -> Edge -> Bool Edge Int i Int j == :: Edge -> Edge -> Bool == Edge Int i' Int j' = (Int i forall a. Eq a => a -> a -> Bool == Int i' Bool -> Bool -> Bool && Int j forall a. Eq a => a -> a -> Bool == Int j') Bool -> Bool -> Bool || (Int i forall a. Eq a => a -> a -> Bool == Int j' Bool -> Bool -> Bool && Int j forall a. Eq a => a -> a -> Bool == Int i') instance Hashable Edge where hashWithSalt :: Int -> Edge -> Int hashWithSalt Int s (Edge Int m1 Int m2) = forall a. Hashable a => Int -> a -> Int hashWithSalt Int s (forall a. Ord a => a -> a -> a min Int m1 Int m2) forall a. Hashable a => Int -> a -> Int `hashWithSalt` (forall a. Ord a => a -> a -> a max Int m1 Int m2) data Vertex = Vertex Double Double deriving (Int -> Vertex -> ShowS [Vertex] -> ShowS Vertex -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Vertex] -> ShowS $cshowList :: [Vertex] -> ShowS show :: Vertex -> String $cshow :: Vertex -> String showsPrec :: Int -> Vertex -> ShowS $cshowsPrec :: Int -> Vertex -> ShowS Show, Vertex -> Vertex -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Vertex -> Vertex -> Bool $c/= :: Vertex -> Vertex -> Bool == :: Vertex -> Vertex -> Bool $c== :: Vertex -> Vertex -> Bool Eq) data Triangulation = Triangulation { Triangulation -> IntMap Vertex _vertices :: IntMap Vertex , Triangulation -> [Triangle] _triangles :: [Triangle] , Triangulation -> [Edge] _edges :: [Edge] } deriving Int -> Triangulation -> ShowS [Triangulation] -> ShowS Triangulation -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Triangulation] -> ShowS $cshowList :: [Triangulation] -> ShowS show :: Triangulation -> String $cshow :: Triangulation -> String showsPrec :: Int -> Triangulation -> ShowS $cshowsPrec :: Int -> Triangulation -> ShowS Show data ConstrainedTriangulation = ConstrainedTriangulation { ConstrainedTriangulation -> Triangulation _triangulation :: Triangulation , ConstrainedTriangulation -> [Edge] _fixedEdges :: [Edge] } deriving Int -> ConstrainedTriangulation -> ShowS [ConstrainedTriangulation] -> ShowS ConstrainedTriangulation -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ConstrainedTriangulation] -> ShowS $cshowList :: [ConstrainedTriangulation] -> ShowS show :: ConstrainedTriangulation -> String $cshow :: ConstrainedTriangulation -> String showsPrec :: Int -> ConstrainedTriangulation -> ShowS $cshowsPrec :: Int -> ConstrainedTriangulation -> ShowS Show