{-# 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 []