# Signals

## Signal{T}

`abstract Signal{T}`

```
type Input{T} <: Signal{T} ... end
i = Input(0) # Construct an input signal of integers with the default value 0
```

## Node{T}

`abstract Node{T} <: Signal{T}`

## lift

### @lift

Example:

`z = @lift x*y`

Here when `x`

and `y`

are signals, the above expression is equivalent to:

`z = lift((a,b) -> a*b, x, y)`

If, say, only x is a signal, then it is equivalent to:

`z = lift(a -> a*y, x)`

You can also create signals of tuples or arrays:

```
# E.g.
z = @lift (x, 2y, x*y)
# z is now a Signal{Tuple}
```

# State

## foldl

## foldr

# Filters and Gates

## filter

## dropif

## droprepeats

## keepwhen

## dropwhen

# Sample and Merge

## sampleon

## merge

# Timed Signals

## fps

## fpswhen

## every

## timestamp