As mentioned in Fyodor's comments, types cannot have statically permitted constraints in the same way as functions (mainly because static constraints are handled with inlining) and you cannot embed the whole type).
One way to solve this problem is to make the constraint explicit in the type, and then create a function with a static member constraint that captures the functionality and passes it to the type.
In your example, you need the + operator, so we can add adder as a type parameter:
type MovingSum<'T>(initial:'T, adder:'T -> 'T -> 'T) = let mutable sum = initial interface IMovingFunc<'T> with member this.Add x = sum <- adder sum x
This does not require static restrictions for members, but when creating MovingSum you need to provide an additional parameter. This is not so bad, but you can avoid this by specifying a built-in function that creates a MovingSum and captures the + operator:
let inline movingSum initial = MovingSum(initial, fun ab -> a + b) :> IMovingFunc<_>
source share