# Domains

Domain is an abstract type whose subtypes represent oriented domains on which we wish to approximate functions. Examples include Interval, Ray, Line and Arc. Periodic domains include PeriodicSegment, PeriodicLine and Circle.

## Relationship with spaces

Every domain d has a default space, constructed via Space(d). For example, the default space for ChebyshevInterval() is Chebyshev(ChebyshevInterval()), which is efficient for representing smooth functions. On the other hand, the default space for PeriodicSegment() is Fourier(PeriodicSegment()), which uses trigonometric polynomials to approximate periodic functions.

## Manipulating domains

Domains can be manipulated to make more complicated domains. For example, you can take the union of an interval and a circle

ChebyshevInterval() ∪ Circle(3,0.5)  # equivalent to union(ChebyshevInterval(),Circle(3,0.5))

and the following creates a rectangle [0,1]^2:

rect=Interval(0,1)^2

Some other set operations are partially implemented:

Interval(0,2) ∩ ChebyshevInterval()  # returns Interval(0,1)