--------------------------------------------------------------------------------
-- |
-- Module      :  Data.Geometry.PlanarSubdivision.TreeRep
-- Copyright   :  (C) Frank Staals
-- License     :  see the LICENSE file
-- Maintainer  :  Frank Staals
--
-- Data types that help encode/decode a planegraph as a JSON/YAML file.
--
--------------------------------------------------------------------------------
module Data.Geometry.PlanarSubdivision.TreeRep( PlanarSD(..)
                                              , Vtx(..)
                                              , myTreeRep
                                              ) where

-- FIXME; uncomment myTreeRep

import Data.Aeson
import Data.PlaneGraph.AdjRep (Vtx(..))
import GHC.Generics (Generic)

import Data.Geometry.Point
import Data.RealNumber.Rational

--------------------------------------------------------------------------------



-- | Specify the planar subdivison as a tree of components
data PlanarSD v e f r = PlanarSD
  { PlanarSD v e f r -> f
outerFace :: f           -- ^ outer face
  , PlanarSD v e f r -> InnerSD v e f r
inner     :: InnerSD v e f r
  } deriving (Int -> PlanarSD v e f r -> ShowS
[PlanarSD v e f r] -> ShowS
PlanarSD v e f r -> String
(Int -> PlanarSD v e f r -> ShowS)
-> (PlanarSD v e f r -> String)
-> ([PlanarSD v e f r] -> ShowS)
-> Show (PlanarSD v e f r)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall v e f r.
(Show f, Show r, Show e, Show v) =>
Int -> PlanarSD v e f r -> ShowS
forall v e f r.
(Show f, Show r, Show e, Show v) =>
[PlanarSD v e f r] -> ShowS
forall v e f r.
(Show f, Show r, Show e, Show v) =>
PlanarSD v e f r -> String
showList :: [PlanarSD v e f r] -> ShowS
$cshowList :: forall v e f r.
(Show f, Show r, Show e, Show v) =>
[PlanarSD v e f r] -> ShowS
show :: PlanarSD v e f r -> String
$cshow :: forall v e f r.
(Show f, Show r, Show e, Show v) =>
PlanarSD v e f r -> String
showsPrec :: Int -> PlanarSD v e f r -> ShowS
$cshowsPrec :: forall v e f r.
(Show f, Show r, Show e, Show v) =>
Int -> PlanarSD v e f r -> ShowS
Show,PlanarSD v e f r -> PlanarSD v e f r -> Bool
(PlanarSD v e f r -> PlanarSD v e f r -> Bool)
-> (PlanarSD v e f r -> PlanarSD v e f r -> Bool)
-> Eq (PlanarSD v e f r)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall v e f r.
(Eq f, Eq r, Eq e, Eq v) =>
PlanarSD v e f r -> PlanarSD v e f r -> Bool
/= :: PlanarSD v e f r -> PlanarSD v e f r -> Bool
$c/= :: forall v e f r.
(Eq f, Eq r, Eq e, Eq v) =>
PlanarSD v e f r -> PlanarSD v e f r -> Bool
== :: PlanarSD v e f r -> PlanarSD v e f r -> Bool
$c== :: forall v e f r.
(Eq f, Eq r, Eq e, Eq v) =>
PlanarSD v e f r -> PlanarSD v e f r -> Bool
Eq,a -> PlanarSD v e f b -> PlanarSD v e f a
(a -> b) -> PlanarSD v e f a -> PlanarSD v e f b
(forall a b. (a -> b) -> PlanarSD v e f a -> PlanarSD v e f b)
-> (forall a b. a -> PlanarSD v e f b -> PlanarSD v e f a)
-> Functor (PlanarSD v e f)
forall a b. a -> PlanarSD v e f b -> PlanarSD v e f a
forall a b. (a -> b) -> PlanarSD v e f a -> PlanarSD v e f b
forall v e f a b. a -> PlanarSD v e f b -> PlanarSD v e f a
forall v e f a b. (a -> b) -> PlanarSD v e f a -> PlanarSD v e f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> PlanarSD v e f b -> PlanarSD v e f a
$c<$ :: forall v e f a b. a -> PlanarSD v e f b -> PlanarSD v e f a
fmap :: (a -> b) -> PlanarSD v e f a -> PlanarSD v e f b
$cfmap :: forall v e f a b. (a -> b) -> PlanarSD v e f a -> PlanarSD v e f b
Functor,(forall x. PlanarSD v e f r -> Rep (PlanarSD v e f r) x)
-> (forall x. Rep (PlanarSD v e f r) x -> PlanarSD v e f r)
-> Generic (PlanarSD v e f r)
forall x. Rep (PlanarSD v e f r) x -> PlanarSD v e f r
forall x. PlanarSD v e f r -> Rep (PlanarSD v e f r) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall v e f r x. Rep (PlanarSD v e f r) x -> PlanarSD v e f r
forall v e f r x. PlanarSD v e f r -> Rep (PlanarSD v e f r) x
$cto :: forall v e f r x. Rep (PlanarSD v e f r) x -> PlanarSD v e f r
$cfrom :: forall v e f r x. PlanarSD v e f r -> Rep (PlanarSD v e f r) x
Generic)

instance (ToJSON r,   ToJSON v, ToJSON e, ToJSON f)     => ToJSON   (PlanarSD v e f r) where
  toEncoding :: PlanarSD v e f r -> Encoding
toEncoding = Options -> PlanarSD v e f r -> Encoding
forall a.
(Generic a, GToJSON' Encoding Zero (Rep a)) =>
Options -> a -> Encoding
genericToEncoding Options
defaultOptions
instance (FromJSON r, FromJSON v, FromJSON e, FromJSON f) => FromJSON (PlanarSD v e f r)


data InnerSD v e f r = InnerSD
  { InnerSD v e f r -> [Vtx v e r]
adjs     :: [Vtx v e r] -- ^ list of vertices and edges in the
                                -- components incident to the outer
                                -- face
  , InnerSD v e f r -> [(f, [InnerSD v e f r])]
faces    :: [(f, [InnerSD v e f r])] -- ^ for each internal
                 -- face in the component described by adjs its data,
                 -- and possible holes
  } deriving (Int -> InnerSD v e f r -> ShowS
[InnerSD v e f r] -> ShowS
InnerSD v e f r -> String
(Int -> InnerSD v e f r -> ShowS)
-> (InnerSD v e f r -> String)
-> ([InnerSD v e f r] -> ShowS)
-> Show (InnerSD v e f r)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall v e f r.
(Show r, Show e, Show v, Show f) =>
Int -> InnerSD v e f r -> ShowS
forall v e f r.
(Show r, Show e, Show v, Show f) =>
[InnerSD v e f r] -> ShowS
forall v e f r.
(Show r, Show e, Show v, Show f) =>
InnerSD v e f r -> String
showList :: [InnerSD v e f r] -> ShowS
$cshowList :: forall v e f r.
(Show r, Show e, Show v, Show f) =>
[InnerSD v e f r] -> ShowS
show :: InnerSD v e f r -> String
$cshow :: forall v e f r.
(Show r, Show e, Show v, Show f) =>
InnerSD v e f r -> String
showsPrec :: Int -> InnerSD v e f r -> ShowS
$cshowsPrec :: forall v e f r.
(Show r, Show e, Show v, Show f) =>
Int -> InnerSD v e f r -> ShowS
Show,InnerSD v e f r -> InnerSD v e f r -> Bool
(InnerSD v e f r -> InnerSD v e f r -> Bool)
-> (InnerSD v e f r -> InnerSD v e f r -> Bool)
-> Eq (InnerSD v e f r)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall v e f r.
(Eq r, Eq e, Eq v, Eq f) =>
InnerSD v e f r -> InnerSD v e f r -> Bool
/= :: InnerSD v e f r -> InnerSD v e f r -> Bool
$c/= :: forall v e f r.
(Eq r, Eq e, Eq v, Eq f) =>
InnerSD v e f r -> InnerSD v e f r -> Bool
== :: InnerSD v e f r -> InnerSD v e f r -> Bool
$c== :: forall v e f r.
(Eq r, Eq e, Eq v, Eq f) =>
InnerSD v e f r -> InnerSD v e f r -> Bool
Eq,a -> InnerSD v e f b -> InnerSD v e f a
(a -> b) -> InnerSD v e f a -> InnerSD v e f b
(forall a b. (a -> b) -> InnerSD v e f a -> InnerSD v e f b)
-> (forall a b. a -> InnerSD v e f b -> InnerSD v e f a)
-> Functor (InnerSD v e f)
forall a b. a -> InnerSD v e f b -> InnerSD v e f a
forall a b. (a -> b) -> InnerSD v e f a -> InnerSD v e f b
forall v e f a b. a -> InnerSD v e f b -> InnerSD v e f a
forall v e f a b. (a -> b) -> InnerSD v e f a -> InnerSD v e f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> InnerSD v e f b -> InnerSD v e f a
$c<$ :: forall v e f a b. a -> InnerSD v e f b -> InnerSD v e f a
fmap :: (a -> b) -> InnerSD v e f a -> InnerSD v e f b
$cfmap :: forall v e f a b. (a -> b) -> InnerSD v e f a -> InnerSD v e f b
Functor,(forall x. InnerSD v e f r -> Rep (InnerSD v e f r) x)
-> (forall x. Rep (InnerSD v e f r) x -> InnerSD v e f r)
-> Generic (InnerSD v e f r)
forall x. Rep (InnerSD v e f r) x -> InnerSD v e f r
forall x. InnerSD v e f r -> Rep (InnerSD v e f r) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall v e f r x. Rep (InnerSD v e f r) x -> InnerSD v e f r
forall v e f r x. InnerSD v e f r -> Rep (InnerSD v e f r) x
$cto :: forall v e f r x. Rep (InnerSD v e f r) x -> InnerSD v e f r
$cfrom :: forall v e f r x. InnerSD v e f r -> Rep (InnerSD v e f r) x
Generic)

instance (ToJSON r,   ToJSON v, ToJSON e, ToJSON f)     => ToJSON   (InnerSD v e r f) where
  toEncoding :: InnerSD v e r f -> Encoding
toEncoding = Options -> InnerSD v e r f -> Encoding
forall a.
(Generic a, GToJSON' Encoding Zero (Rep a)) =>
Options -> a -> Encoding
genericToEncoding Options
defaultOptions
instance (FromJSON r, FromJSON v, FromJSON e, FromJSON f) => FromJSON (InnerSD v e r f)



--------------------------------------------------------------------------------

-- | This represents the following Planar subdivision. Note that the
-- graph is undirected, the arrows are just to indicate what the
-- Positive direction of the darts is.
--
-- ![mySubDiv](docs/Data/Geometry/PlanarSubdivision/mySubDiv.jpg)
myTreeRep :: PlanarSD Int () String (RealNumber 3)
myTreeRep :: PlanarSD Int () String (RealNumber 3)
myTreeRep = String
-> InnerSD Int () String (RealNumber 3)
-> PlanarSD Int () String (RealNumber 3)
forall v e f r. f -> InnerSD v e f r -> PlanarSD v e f r
PlanarSD String
"f_infty" ([Vtx Int () (RealNumber 3)]
-> [(String, [InnerSD Int () String (RealNumber 3)])]
-> InnerSD Int () String (RealNumber 3)
forall v e f r.
[Vtx v e r] -> [(f, [InnerSD v e f r])] -> InnerSD v e f r
InnerSD [Vtx Int () (RealNumber 3)]
ads [(String, [InnerSD Int () String (RealNumber 3)])]
fs)
  where
    fs :: [(String, [InnerSD Int () String (RealNumber 3)])]
fs = [ (String
"f_1", [])
         , (String
"f_2", [InnerSD Int () String (RealNumber 3)
f5, InnerSD Int () String (RealNumber 3)
f6])
         , (String
"f_3", [])
         , (String
"f_4", [InnerSD Int () String (RealNumber 3)
f7])
         ]

    f5 :: InnerSD Int () String (RealNumber 3)
f5 = [Vtx Int () (RealNumber 3)]
-> [(String, [InnerSD Int () String (RealNumber 3)])]
-> InnerSD Int () String (RealNumber 3)
forall v e f r.
[Vtx v e r] -> [(f, [InnerSD v e f r])] -> InnerSD v e f r
InnerSD [ Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
16 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
3    RealNumber 3
8) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
17, Int -> (Int, ())
forall a. a -> (a, ())
e Int
18]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
17 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
0    RealNumber 3
7) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
16, Int -> (Int, ())
forall a. a -> (a, ())
e Int
18]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
18 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 (-RealNumber 3
1) RealNumber 3
4) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
16, Int -> (Int, ())
forall a. a -> (a, ())
e Int
17]
                 ] [(String
"f_5",[])]

    f6 :: InnerSD Int () String (RealNumber 3)
f6 = [Vtx Int () (RealNumber 3)]
-> [(String, [InnerSD Int () String (RealNumber 3)])]
-> InnerSD Int () String (RealNumber 3)
forall v e f r.
[Vtx v e r] -> [(f, [InnerSD v e f r])] -> InnerSD v e f r
InnerSD [ Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
15 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
3   RealNumber 3
3) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
14, Int -> (Int, ())
forall a. a -> (a, ())
e Int
13]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
13 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
6   RealNumber 3
4) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
14, Int -> (Int, ())
forall a. a -> (a, ())
e Int
15]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
14 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
3   RealNumber 3
6) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
13, Int -> (Int, ())
forall a. a -> (a, ())
e Int
15]
                 ] [(String
"f_6",[])]

    f7 :: InnerSD Int () String (RealNumber 3)
f7 = [Vtx Int () (RealNumber 3)]
-> [(String, [InnerSD Int () String (RealNumber 3)])]
-> InnerSD Int () String (RealNumber 3)
forall v e f r.
[Vtx v e r] -> [(f, [InnerSD v e f r])] -> InnerSD v e f r
InnerSD [ Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
19 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
0   RealNumber 3
9) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
20, Int -> (Int, ())
forall a. a -> (a, ())
e Int
23]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
20 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
0   RealNumber 3
4) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
19, Int -> (Int, ())
forall a. a -> (a, ())
e Int
21]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
21 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
15  RealNumber 3
2) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
20, Int -> (Int, ())
forall a. a -> (a, ())
e Int
22]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
22 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
17  RealNumber 3
5) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
21, Int -> (Int, ())
forall a. a -> (a, ())
e Int
23]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
23 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
15  RealNumber 3
8) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
19, Int -> (Int, ())
forall a. a -> (a, ())
e Int
22]
                 ] [(String
"f_7",[InnerSD Int () String (RealNumber 3)
f8])]

    f8 :: InnerSD Int () String (RealNumber 3)
f8 = [Vtx Int () (RealNumber 3)]
-> [(String, [InnerSD Int () String (RealNumber 3)])]
-> InnerSD Int () String (RealNumber 3)
forall v e f r.
[Vtx v e r] -> [(f, [InnerSD v e f r])] -> InnerSD v e f r
InnerSD [ Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
24 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
14  RealNumber 3
6) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
25, Int -> (Int, ())
forall a. a -> (a, ())
e Int
26]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
25 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
13  RealNumber 3
8) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
24, Int -> (Int, ())
forall a. a -> (a, ())
e Int
26]
                 , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
26 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
12  RealNumber 3
5) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
24, Int -> (Int, ())
forall a. a -> (a, ())
e Int
25]
                 ] [(String
"f_8",[])]

    ads :: [Vtx Int () (RealNumber 3)]
ads = [ Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
0 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
0    RealNumber 3
0)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
1, Int -> (Int, ())
forall a. a -> (a, ())
e Int
4]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
1 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
10   RealNumber 3
2)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
0, Int -> (Int, ())
forall a. a -> (a, ())
e Int
5]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
2 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
9    RealNumber 3
9)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
1, Int -> (Int, ())
forall a. a -> (a, ())
e Int
7, Int -> (Int, ())
forall a. a -> (a, ())
e Int
3]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
3 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
0    RealNumber 3
10)   [Int -> (Int, ())
forall a. a -> (a, ())
e Int
2, Int -> (Int, ())
forall a. a -> (a, ())
e Int
4]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
4 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 (-RealNumber 3
4) RealNumber 3
5)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
0, Int -> (Int, ())
forall a. a -> (a, ())
e Int
3]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
5 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
15   RealNumber 3
3)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
1, Int -> (Int, ())
forall a. a -> (a, ())
e Int
6]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
6 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
20   RealNumber 3
6)    [Int -> (Int, ())
forall a. a -> (a, ())
e Int
5, Int -> (Int, ())
forall a. a -> (a, ())
e Int
7]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
7 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
10   RealNumber 3
14)   [Int -> (Int, ())
forall a. a -> (a, ())
e Int
2, Int -> (Int, ())
forall a. a -> (a, ())
e Int
6, Int -> (Int, ())
forall a. a -> (a, ())
e Int
8]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
8 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
4    RealNumber 3
13)   [Int -> (Int, ())
forall a. a -> (a, ())
e Int
7, Int -> (Int, ())
forall a. a -> (a, ())
e Int
3]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
9 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
4    (-RealNumber 3
4)) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
10, Int -> (Int, ())
forall a. a -> (a, ())
e Int
11]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
10 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
8   (-RealNumber 3
4)) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
11, Int -> (Int, ())
forall a. a -> (a, ())
e Int
9]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
11 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
11  (-RealNumber 3
2)) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
10, Int -> (Int, ())
forall a. a -> (a, ())
e Int
12]
          , Int
-> Point 2 (RealNumber 3)
-> [(Int, ())]
-> Vtx Int () (RealNumber 3)
forall r e. Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
12 (RealNumber 3 -> RealNumber 3 -> Point 2 (RealNumber 3)
forall r. r -> r -> Point 2 r
Point2 RealNumber 3
7   (-RealNumber 3
1)) [Int -> (Int, ())
forall a. a -> (a, ())
e Int
9, Int -> (Int, ())
forall a. a -> (a, ())
e Int
11]
          ]

    e :: a -> (a, ())
e a
i = (a
i,())

    vtx :: Int -> Point 2 r -> [(Int, e)] -> Vtx Int e r
vtx Int
i Point 2 r
p [(Int, e)]
as = Int -> Point 2 r -> [(Int, e)] -> Int -> Vtx Int e r
forall v e r. Int -> Point 2 r -> [(Int, e)] -> v -> Vtx v e r
Vtx Int
i Point 2 r
p [(Int, e)]
as Int
i