# Between

## Description

It turns out that this combinator

```
f ~@~ g = (f .) . (. g)
```

is a powerful thing. It was abstracted from following (commonly used)
pattern `f . h . g`

where `f`

and `g`

are fixed.

This library not only define `~@~`

combinator, but also some derived
combinators that can help us to easily define a lot of things including
lenses. See lens package for detais on what lenses are.

Function `Data.Function.on`

can be implemented using `~@~`

as:

```
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
on f g = (id ~@~ g ~@~ g) f
```

If function @on3@ existed in /base/ then it could be defined as:

```
on3 :: (b -> b -> b -> d) -> (a -> b) -> a -> a -> a -> d
on3 f g = (id ~@~ g ~@~ g ~@~ g) f
```

For more examples see documentation.

## Documentation

Stable releases with API documentation are available on
Hackage.

## Building Options

## License

The BSD 3-Clause License, see LICENSE file for details.

## Contributions

Contributions, pull requests and bug reports are welcome! Please don’t be
afraid to contact author using GitHub or by e-mail (see `.cabal`

file for
that).