hgeometry-0.14: src/Algorithms/Geometry/SoS/Internal.hs
module Algorithms.Geometry.SoS.Internal where
import Algorithms.Geometry.SoS.AsPoint
import Algorithms.Geometry.SoS.Orientation
import Control.CanAquire
import Data.Geometry.Point.Internal
--------------------------------------------------------------------------------
-- simulateSimplicity :: forall t d r b. (Traversable t, SoSD d)
-- => (forall p. ( AsPoint p, HasIndex p
-- , d ~ Dimension p, r ~ NumType p
-- ) => t p -> b)
-- -> t (Point d r) -> b
-- simulateSimplicity = simulateSimplicity'
-- | The actual implementation of SoS
simulateSimplicity' :: forall t d r b. (Traversable t, SoS d)
=> (forall i. ( CanAquire i (Point d r)
, SoS d
) => t (P i d r) -> b)
-> t (Point d r) -> b
simulateSimplicity' alg = runAcquire alg'
where
alg' :: forall i. CanAquire i (Point d r) => t i -> b
alg' = alg . fmap (P @i @d @r)
-- ideally the fmap would just be a coerce, but GHC does not want to do that.