listas heterogéneas a través de tipos flexibles

Estoy tratando de pegar tipos heterogéneos en unlist haciendo uso detipos flexibles

type IFilter<'a> = 
    abstract member Filter: 'a -> 'a

type Cap<'a when 'a: comparison> (cap) = 
    interface IFilter<'a> with
        member this.Filter x = 
            if x < cap
            then x
            else cap

type Floor<'a when 'a: comparison> (floor) = 
     interface IFilter<'a> with
        member this.Filter x = 
            if x > floor
            then x
            else floor

type Calculator<'a, 'b when 'b:> IFilter<'a>> (aFilter: 'b, operation: 'a -> 'a) = 
    member this.Calculate x = 
        let y = x |> operation
        aFilter.Filter y

type TowerControl<'a> () = 
    let mutable calculationStack = List.empty
    member this.addCalculation (x: Calculator<'a, #IFilter<'a>> ) =
        let newList = x::calculationStack
        calculationStack <- newList

let floor10 = Floor<int> 10
let calc1 = Calculator<int, Floor<int>> (floor10, ((+) 10))

let cap10 = Cap 10
let calc2 = Calculator (cap10, ((-) 5))

let tower = TowerControl<int> ()
tower.addCalculation calc1
tower.addCalculation calc2

En el ejemplo anterior

member this.addCalculation (x: Calculator<'a, #IFiler<'a>> ) =  

produce el error

error FS0670: este código no es suficientemente genérico. La variable de tipo 'a no se pudo generalizar porque escaparía a su alcance.

Disculpas si ya se ha publicado una pregunta similar. Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta