# `Const<T, P>` in FSharpPlus
`Const`, defined in `Data/Monoids.fs`, is a **bifunctor that ignores its second** (`P`, or phantom) **parameter**. It carries a `T` but no `P`, meaning a `Const<T,P>` can be freely cast into any `Const<T,P2>` where `P2` is any type. That is how `Const`'s covariance and contravariance is implemented. ^xna6ao
The value stored by `Const` can be retrieved using `run : Const<T,P> -> T`.
`Const` is mainly used in lenses, where it is the return type of any read-only lens.
In the FSharpPlus world `Const` is a:
- Bifunctor: `bimap` modifies `T`.
- Monoid: `plus` acts on `T`
- Functor: `map` acts on `P`.
- Contravariant functor: `contramap` acts on `P`.
- Applicative functor: When used as an applicative, `P` is a function `A->B`. `<*>` applies `plus` on the two `T`-s and constructs a `Const<T, B>` with the `plus` result.