wumpus-basic-0.17.0: Basic objects and system code built on Wumpus-Core.

PortabilityGHC
Stabilityhighly unstable
Maintainerstephen.tetley@gmail.com

Wumpus.Basic.Kernel.Base.BaseDefs

Contents

Description

The elementary base types and classes.

Synopsis

Documentation

type family MonUnit m :: *Source

Type family to access the unit parameter of a TraceDrawing or a promoted TraceDrawingT transformer.

A semigroup class

class OPlus t whereSource

A Semigroup class.

The perhaps unusual name is the TeX name for the circled plus glyph. It would be nice if there was a semigroup class in the Haskell Base libraries...

Methods

oplus :: t -> t -> tSource

Instances

OPlus () 
OPlus Primitive 
OPlus CatPrim 
OPlus CtxPicture
 a `oplus` b

Place 'drawing' a over b. The idea of over here is in terms z-ordering, nither picture a or b are actually moved.

Ord u => OPlus (BoundingBox u) 
Num u => OPlus (Vec2 u) 
OPlus (UNil u) 
OPlus a => OPlus (CF a) 
(Fractional u, Ord u) => OPlus (Orientation u) 
(Fractional u, Ord u) => OPlus (PosObject u) 
OPlus a => OPlus (r -> a) 
(OPlus a, OPlus b) => OPlus (a, b) 
OPlus a => OPlus (Const a b) 
OPlus a => OPlus (ImageAns u a) 
(OPlus a, OPlus b, OPlus c) => OPlus (a, b, c) 
(OPlus a, OPlus b, OPlus c, OPlus d) => OPlus (a, b, c, d) 

oconcat :: OPlus t => t -> [t] -> tSource

oconcat : list_head * [rest] -> Ans

Semigroup version of mconcat from the module Data.Monoid.

As a semigroup cannot build a zero value, concat cannot handle the empty list. So to make oconcat a safe function the input list is already destructured by one cons cell.

Effectively this means that client code must handle the empty list case, before calling oconcat.

altconcat :: OPlus a => a -> [a] -> aSource

altconcat : alternative * [list] -> Ans

altconcat uses oplus to create a summary value from a list of values.

When supplied the empty list altconcat returns the supplied alternative value. If the list is inhabited, the alternative value is discarded.

This contrasts to oconcat where the single value represents the head of an already destructured list.

A bifunctor class

class Bimap f whereSource

A Bifunctor class.

Again, it would be nice if there was a Bifunctor class in the Haskell Base libraries...

Methods

bimap :: (a -> p) -> (b -> q) -> f a b -> f p qSource

bimapL :: (a -> p) -> f a b -> f p bSource

bimapR :: (b -> q) -> f a b -> f a qSource

Instances

replaceL :: Bimap f => p -> f a b -> f p bSource

replaceR :: Bimap f => q -> f a b -> f a qSource

Unit phantom type

data UNil u Source

The empty data type - i.e. () - wrapped with a phantom unit parameter.

Constructors

UNil 

Instances

Functor UNil 
Eq (UNil u) 
Ord (UNil u) 
Read (UNil u) 
Show (UNil u) 
Monoid (UNil u) 
Rotate (UNil u) 
RotateAbout (UNil u) 
Scale (UNil u) 
Translate (UNil u) 
OPlus (UNil u) 

Non-contextual unit conversion.

Unit interpretation with respect to the current Point size

dinterpF :: (Functor t, InterpretUnit u) => FontSize -> t Double -> t uSource

dinterp an object that gives access to its unit at the functor position.

normalizeF :: (Functor t, InterpretUnit u) => FontSize -> t u -> t DoubleSource

normalize an object that gives access to its unit at the functor position.

uconvert1 :: (InterpretUnit u, InterpretUnit u1) => FontSize -> u -> u1Source

Convert a scalar value from one unit to another.

uconvertF :: (Functor t, InterpretUnit u, InterpretUnit u1) => FontSize -> t u -> t u1Source

Unit convert an object that gives access to its unit at the Functor position.

In practive this will be *all* Image answers.

intraMapFunctor :: (Functor f, InterpretUnit u) => FontSize -> (f Double -> f Double) -> f u -> f uSource

Alignment

data HAlign Source

Horizontal alignment - align to the top, center or bottom.

Constructors

HTop 
HCenter 
HBottom 

data VAlign Source

Vertical alignment - align to the left, center or bottom.

Constructors

VLeft 
VCenter 
VRight 

Cardinal (compass) positions

data Cardinal Source

An enumeratied type representing the compass positions.

Advance vector

type AdvanceVec u = Vec2 uSource

Advance vectors provide an idiom for drawing consecutive graphics. PostScript uses them to draw left-to-right text - each character has an advance vector for the width and as characters are drawn they successively displace the start point for the next character with their advance vector.

Type alias for Vec2.

advanceH :: AdvanceVec u -> uSource

Extract the horizontal component of an advance vector.

For left-to-right latin text, the vertical component of an advance vector is expected to be 0. Ingoring it seems permissible when drawing text.

advanceV :: AdvanceVec u -> uSource

Extract the verticall component of an advance vector.