# `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.