# FSharpPlus Dual
In FSharpPlus, Dual is a monoid that takes another monoid's magma and flips its arguments. Its zero is the zero of the wrapped monoid.
The above might be difficult to understand, so just look at the code:
```fsharp
type Dual<'monoid> = Dual of 'monoid with
static member inline (+) (Dual left, Dual right) =
let combined = right ++ left //Instead of left ++ right
Dual combined
static member inline get_Zero () =
let wrappedZero : 'monoid = zero
Dual wrappedZero
```