# The Free Monad in FSharpPlus
The [[Free Monad]] is implemented in FSharpPlus by
```fsharp
type Free<'``functor<'t>``,'t> = Pure of 't | Roll of obj
```
`liftF` can be used to lift a functor into `Free`.
Think of this as an automated free monad recipe. Use it to automate writing `Program` types.
For sample see ![[Crypto with FSharp (free monad exercise).dib]]
In the FSharpPlus world `Free` is a monad, functor and applicative functor.