let chainTemplate processFunction canContinue s =the input parameter s is generalized so it is just a place holder. In my simple design pattern sample, the type is an integer.
if canContinue s then
processFunction s
else s
// simple design pattern sample
let canContinueF _ = trueIn the real world sample, s is actually a tuple type.
let processF x = x + 1
// real world problem
let canContinueF (v,unitNameIndex) = v >= unit && unitNameIndex < unitNames.Length-1
let processF (x, unitNameIndex) = (x / unit, unitNameIndex+1)
F#'s automatic generalization feature almost makes my template pattern retired.
If you want to implement the same feature in C#, seems that you have to use generic function. It is true that C# can do the same thing, but readability and productivity will be much lower than the F# version.