diagrams-lib-1.4.3: Embedded domain-specific language for declarative graphics

Copyright | (c) 2013 diagrams-lib team (see LICENSE)
License | BSD-style (see LICENSE)
Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | None
Language | Haskell2010

Diagrams.Query

Contents

- Queries
  - Queries on diagrams

Description

A query is a function that maps points in a vector space to values in some monoid. Queries naturally form a monoid, with two queries being combined pointwise.

Synopsis

- newtype Query (v :: Type -> Type) n m = Query {
  - runQuery :: Point v n -> m
  }
- class HasQuery t m | t -> m where
  - getQuery :: t -> Query (V t) (N t) m
- sample :: HasQuery t m => t -> Point (V t) (N t) -> m
- inquire :: HasQuery t Any => t -> Point (V t) (N t) -> Bool
- query :: forall m b (v :: Type -> Type) n. Monoid m => QDiagram b v n m -> Query v n m
- value :: Monoid m => m -> QDiagram b v n Any -> QDiagram b v n m
- resetValue :: (Eq m, Monoid m) => QDiagram b v n m -> QDiagram b v n Any
- clearValue :: QDiagram b v n m -> QDiagram b v n Any

# Queries

newtype Query (v :: Type -> Type) n m Source #

A query is a function that maps points in a vector space to values in some monoid. Queries naturally form a monoid, with two queries being combined pointwise.

The idea for annotating diagrams with monoidal queries came from the graphics-drawingcombinators package, http://hackage.haskell.org/package/graphics-drawingcombinators.

Constructors

Query |

Fields

- runQuery :: Point v n -> m

#### Instances

Instances details

Functor v => Corepresentable (Query v) |
Instance details Defined in Diagrams.Core.Query Associated Types type Corep (Query v) :: Type -> Type Source # Methods cotabulate :: (Corep (Query v) d -> c) -> Query v d c Source #
Functor v => Profunctor (Query v) |

Instance details

Defined in Diagrams.Core.Query

Methods

dimap :: (a -> b) -> (c -> d) -> Query v b c -> Query v a d Source #

lmap :: (a -> b) -> Query v b c -> Query v a c Source #

rmap :: (b -> c) -> Query v a b -> Query v a c Source #

(#.) :: forall a b c q. Coercible c b => q b c -> Query v a b -> Query v a c Source #

(.#) :: forall a b c q. Coercible b a => Query v b c -> q a b -> Query v a c Source #

Functor v => Closed (Query v) |
Instance details Defined in Diagrams.Core.Query Methods closed :: Query v a b -> Query v (x -> a) (x -> b) Source #
Functor v => Costrong (Query v) |
Instance details Defined in Diagrams.Core.Query Methods unfirst :: Query v (a, d) (b, d) -> Query v a b Source # unsecond :: Query v (d, a) (d, b) -> Query v a b Source #
Functor v => Cosieve (Query v) (Point v) |
Instance details Defined in Diagrams.Core.Query Methods cosieve :: Query v a b -> Point v a -> b Source #
Monad (Query v n) |
Instance details Defined in Diagrams.Core.Query Methods (>>=) :: Query v n a -> (a -> Query v n b) -> Query v n b (>>) :: Query v n a -> Query v n b -> Query v n b return :: a -> Query v n a
Functor (Query v n) |
Instance details Defined in Diagrams.Core.Query Methods fmap :: (a -> b) -> Query v n a -> Query v n b (<$) :: a -> Query v n b -> Query v n a #
Applicative (Query v n) |
Instance details Defined in Diagrams.Core.Query Methods pure :: a -> Query v n a # (<*>) :: Query v n (a -> b) -> Query v n a -> Query v n b # liftA2 :: (a -> b -> c) -> Query v n a -> Query v n b -> Query v n c # (*>) :: Query v n a -> Query v n b -> Query v n b # (<*) :: Query v n a -> Query v n b -> Query v n a #
Distributive (Query v n) |
Instance details Defined in Diagrams.Core.Query Methods distribute :: Functor f => f (Query v n a) -> Query v n (f a) Source # collect :: Functor f => (a -> Query v n b) -> f a -> Query v n (f b) Source # distributeM :: Monad m => m (Query v n a) -> Query v n (m a) Source # collectM :: Monad m => (a -> Query v n b) -> m a -> Query v n (m b) Source #
Representable (Query v n) |
Instance details Defined in Diagrams.Core.Query Associated Types type Rep (Query v n) Source # Methods tabulate :: (Rep (Query v n) -> a) -> Query v n a Source # index :: Query v n a -> Rep (Query v n) -> a Source #
Semigroup m => Semigroup (Query v n m) |
Instance details Defined in Diagrams.Core.Query Methods (<>) :: Query v n m -> Query v n m -> Query v n m sconcat :: NonEmpty (Query v n m) -> Query v n m stimes :: Integral b => b -> Query v n m -> Query v n m
Monoid m => Monoid (Query v n m) |
Instance details Defined in Diagrams.Core.Query Methods mempty :: Query v n m mappend :: Query v n m -> Query v n m -> Query v n m # mconcat :: [Query v n m] -> Query v n m
(Additive v, Num n) => Transformable (Query v n m) |
Instance details Defined in Diagrams.Core.Query Methods transform :: Transformation (V (Query v n m)) (N (Query v n m)) -> Query v n m -> Query v n m Source #
(Additive v, Num n) => HasOrigin (Query v n m) |
Instance details Defined in Diagrams.Core.Query Methods moveOriginTo :: Point (V (Query v n m)) (N (Query v n m)) -> Query v n m -> Query v n m Source #
Wrapped (Query v n m) |
Instance details Defined in Diagrams.Core.Query Associated Types type Unwrapped (Query v n m) Source # Methods _Wrapped' :: Iso' (Query v n m) (Unwrapped (Query v n m)) Source #
HasQuery (Query v n m) m Source # |
Instance details Defined in Diagrams.Query Methods getQuery :: Query v n m -> Query (V (Query v n m)) (N (Query v n m)) m Source #
Rewrapped (Query v a m) (Query v' a' m') |
Instance details Defined in Diagrams.Core.Query
type Corep (Query v) |
Instance details Defined in Diagrams.Core.Query type Corep (Query v) = Point v
type Rep (Query v n) |
Instance details Defined in Diagrams.Core.Query type Rep (Query v n) = Point v n
type V (Query v n m) |
Instance details Defined in Diagrams.Core.Query type V (Query v n m) = v
type N (Query v n m) |
Instance details Defined in Diagrams.Core.Query type N (Query v n m) = n
type Unwrapped (Query v n m) |
Instance details Defined in Diagrams.Core.Query type Unwrapped (Query v n m) = Point v n -> m

class HasQuery t m | t -> m where Source #

Types which can answer a `Query` about points inside the geometric object.

If `t` and `m` are both a `Semigroup`s, `getQuery` should satisfy

    getQuery (t1 <> t2) = getQuery t1 <> getQuery t2

Methods

getQuery :: t -> Query (V t) (N t) m Source #

Extract the query of an object.

#### Instances

Instances details

(Floating n, Ord n) => HasQuery (CSG n) Any Source # |
Instance details Defined in Diagrams.ThreeD.Shapes Methods getQuery :: CSG n -> Query (V (CSG n)) (N (CSG n)) Any Source #
OrderedField n => HasQuery (Frustum n) Any Source # |
Instance details Defined in Diagrams.ThreeD.Shapes Methods getQuery :: Frustum n -> Query (V (Frustum n)) (N (Frustum n)) Any Source #
(Num n, Ord n) => HasQuery (Box n) Any Source # |
Instance details Defined in Diagrams.ThreeD.Shapes Methods getQuery :: Box n -> Query (V (Box n)) (N (Box n)) Any Source #
(Num n, Ord n) => HasQuery (Ellipsoid n) Any Source # |
Instance details Defined in Diagrams.ThreeD.Shapes Methods getQuery :: Ellipsoid n -> Query (V (Ellipsoid n)) (N (Ellipsoid n)) Any Source #
RealFloat n => HasQuery (Located (Trail V2 n)) Crossings Source # |
Instance details Defined in Diagrams.TwoD.Path Methods getQuery :: Located (Trail V2 n) -> Query (V (Located (Trail V2 n))) (N (Located (Trail V2 n))) Crossings Source #
RealFloat n => HasQuery (Located (Trail' l V2 n)) Crossings Source # |
Instance details Defined in Diagrams.TwoD.Path Methods getQuery :: Located (Trail' l V2 n) -> Query (V (Located (Trail' l V2 n))) (N (Located (Trail' l V2 n))) Crossings Source #
RealFloat n => HasQuery (Clip n) All Source # | A point inside a clip if the point is in `All` invididual clipping paths.
Instance details Defined in Diagrams.TwoD.Path Methods getQuery :: Clip n -> Query (V (Clip n)) (N (Clip n)) All Source #
RealFloat n => HasQuery (Path V2 n) Crossings Source # |
Instance details Defined in Diagrams.TwoD.Path Methods getQuery :: Path V2 n -> Query (V (Path V2 n)) (N (Path V2 n)) Crossings Source #
RealFloat n => HasQuery (DImage n a) Any Source # |
Instance details Defined in Diagrams.TwoD.Image Methods getQuery :: DImage n a -> Query (V (DImage n a)) (N (DImage n a)) Any Source #
(Additive v, Foldable v, Ord n) => HasQuery (BoundingBox v n) Any Source # |
Instance details Defined in Diagrams.BoundingBox Methods getQuery :: BoundingBox v n -> Query (V (BoundingBox v n)) (N (BoundingBox v n)) Any Source #
HasQuery (Query v n m) m Source # |
Instance details Defined in Diagrams.Query Methods getQuery :: Query v n m -> Query (V (Query v n m)) (N (Query v n m)) m Source #
Monoid m => HasQuery (QDiagram b v n m) m Source # |
Instance details Defined in Diagrams.Query Methods getQuery :: QDiagram b v n m -> Query (V (QDiagram b v n m)) (N (QDiagram b v n m)) m Source #

sample :: HasQuery t m => t -> Point (V t) (N t) -> m Source #

Sample a diagram's query function at a given point.

    sample :: QDiagram b v n m -> Point v n -> m
    sample :: Query v n m      -> Point v n -> m
    sample :: BoundingBox v n  -> Point v n -> Any
    sample :: Path V2 Double   -> Point v n -> Crossings

inquire :: HasQuery t Any => t -> Point (V t) (N t) -> Bool Source #

Test if a point is not equal to `mempty`.

    inquire :: QDiagram b v n Any -> Point v n -> Bool
    inquire :: Query v n Any      -> Point v n -> Bool
    inquire :: BoundingBox v n  -> Point v n -> Bool

## Queries on diagrams

query :: forall m b (v :: Type -> Type) n. Monoid m => QDiagram b v n m -> Query v n m Source #

Get the query function associated with a diagram.

value :: Monoid m => m -> QDiagram b v n Any -> QDiagram b v n m Source #

Set the query value for `True` points in a diagram (i.e. points "inquire" the diagram); `False` points will be set to `mempty`.

resetValue :: (Eq m, Monoid m) => QDiagram b v n m -> QDiagram b v n Any Source #

Reset the query values of a diagram to `True`/`False`: any values equal to `mempty` are set to `False`; any other values are set to `True`.

clearValue :: QDiagram b v n m -> QDiagram b v n Any Source #

Set all the query values of a diagram to `False`.