Optimise interface demo

Can the program below be optimised.
-For speed. (eg inline , how)
-Less boilerplate (eg wrapping functions).
Or is it ok as it is?


open System
open Xunit

type IAnimal =
    abstract member Name: string
    abstract member Talk: string -> unit

type Chicken(name: string) =
    //i:instance
    member _.iName = name

    member _.iTalk(msg: string) =
        printfn $"My name is: {name}"
        printfn $"Cluck: {msg}"

    interface IAnimal with
        member this.Name = this.iName
        member this.Talk(msg: string) = this.iTalk (msg)

let animalFunction (a: IAnimal) : unit =
    printfn ("I am the animalFunction")
    printfn $"In the AnimalFunction i am called:  {a.Name}"
    a.Talk("Koekoek from animalFunction")

[<EntryPoint>]
let main (args: string array) : int =
    printfn "Hello World \n"
    let c = Chicken("Clucky")
    c.iTalk ("Koekoek")
    c |> animalFunction
    0

My first question would be: Do you need to use interfaces and classes?

I only ask as that could be re-written with Discriminated Unions and the code would be much easier to read and maintain.

Hello!
Facing same issue here. Help is appreciated.

Best Regards,
Robert

How can the code be further optimized for both performance and readability while maintaining the use of interfaces in F#?

Thank you for sharing…