Padrão de estratégia em F #

Em C #, tenho o seguinte código:

public class SomeKindaWorker
{
    public double Work(Strategy strat)
    {
        int i = 4;
        // some code ...
        var s = strat.Step1(i);
        // some more code ...
        var d = strat.Step2(s);
        // yet more code ...
        return d;
    }
}

Este é um pedaço de código que pode fazer algum tipo de trabalho usando uma estratégia fornecidaobjeto para preencher partes da implementação. Nota: em geral, os objetos de estratégia não contêm estado; eles meramente fornecem polimorficamente implementações de etapas individuais.

A classe de estratégia é assim:

public abstract class Strategy
{
    public abstract string Step1(int i);
    public abstract double Step2(string s);
}

public class StrategyA : Strategy
{
    public override string Step1(int i) { return "whatever"; }
    public override double Step2(string s) { return 0.0; }
}

public class StrategyB : Strategy
{
    public override string Step1(int i) { return "something else"; }
    public override double Step2(string s) { return 4.5; }
}

Observação: O mesmo efeito pode ser alcançado em C # através do uso de lambdas (e da eliminação completa do objeto de estratégia), mas o bom dessa implementação é que as classes estendidas têm suas implementações Step1 e Step2 juntas.

Pergunta, questão: O que é uma implementação idiomática dessa idéia em F #?

Pensamentos:

Eu poderia injetar funções de etapa individuais na função Trabalho, semelhante à idéia na observação.

Eu também poderia criar um tipo que colete duas funções e passe umvalor desse tipo através de:

type Strategy = { Step1: int -> string; Step2: string -> double }
let strategyA = { Step1 = (fun i -> "whatever"); Step2 = fun s -> 0.0 }
let strategyB = { Step1 = (fun i -> "something else"); Step2 = fun s -> 4.5 }

Essa parece ser a correspondência mais próxima do que estou tentando alcançar: mantém as etapas de implementação próximas para que possam ser examinadas em conjunto. Mas essa idéia (criando um tipo para conter apenas valores de função) é idiomática no paradigma funcional? Algum outro pensamento?

questionAnswers(4)

yourAnswerToTheQuestion