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