{-# OPTIONS_HADDOCK not-home #-}
module Waterfall.Internal.Diagram 
( RawDiagram (..)
) where

import qualified OpenCascade.TopoDS as TopoDS
import Data.Acquire (Acquire)
import Foreign.Ptr (Ptr)
import qualified OpenCascade.HLRBRep.TypeOfResultingEdge as HLRBRep

newtype RawDiagram = RawDiagram { RawDiagram
-> TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge]
runDiagram :: HLRBRep.TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr TopoDS.Edge] }

instance Semigroup RawDiagram where
    RawDiagram
a <> :: RawDiagram -> RawDiagram -> RawDiagram
<> RawDiagram
b = (TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
-> RawDiagram
RawDiagram ((TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
 -> RawDiagram)
-> (TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
-> RawDiagram
forall a b. (a -> b) -> a -> b
$ \TypeOfResultingEdge
lt Bool
v Bool
is3D -> [Ptr Edge] -> [Ptr Edge] -> [Ptr Edge]
forall a. Semigroup a => a -> a -> a
(<>) ([Ptr Edge] -> [Ptr Edge] -> [Ptr Edge])
-> Acquire [Ptr Edge] -> Acquire ([Ptr Edge] -> [Ptr Edge])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> RawDiagram
-> TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge]
runDiagram RawDiagram
a TypeOfResultingEdge
lt Bool
v Bool
is3D Acquire ([Ptr Edge] -> [Ptr Edge])
-> Acquire [Ptr Edge] -> Acquire [Ptr Edge]
forall a b. Acquire (a -> b) -> Acquire a -> Acquire b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RawDiagram
-> TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge]
runDiagram RawDiagram
b TypeOfResultingEdge
lt Bool
v Bool
is3D

instance Monoid RawDiagram where
    mempty :: RawDiagram
mempty = (TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
-> RawDiagram
RawDiagram ((TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
 -> RawDiagram)
-> (TypeOfResultingEdge -> Bool -> Bool -> Acquire [Ptr Edge])
-> RawDiagram
forall a b. (a -> b) -> a -> b
$ \TypeOfResultingEdge
_ Bool
_ Bool
_ -> [Ptr Edge] -> Acquire [Ptr Edge]
forall a. a -> Acquire a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []