listas heterogêneas através de tipos flexíveis
Estou tentando colar tipos heterogêneos em umlist
fazendo uso detipos flexíveis
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
No exemplo acima
member this.addCalculation (x: Calculator<'a, #IFiler<'a>> ) =
produz o erro
erro FS0670: este código não é suficientemente genérico. A variável de tipo 'a não pôde ser generalizada porque escaparia de seu escopo.
Desculpas se uma pergunta semelhante já foi publicada. Obrigado.