Skip to content

Instantly share code, notes, and snippets.

@nakamura-to
Created August 2, 2012 03:26
Show Gist options
  • Save nakamura-to/3233019 to your computer and use it in GitHub Desktop.
Save nakamura-to/3233019 to your computer and use it in GitHub Desktop.
pseudo inheritance in F#
type Animal = { Name: string; Bark: unit -> string }
let newDog name = { Name = name; Bark = fun _ -> "Bow wow" }
let newCat name = { Name = name; Bark = fun _ -> "meow" }
let newCheetah name =
let cat = newCat name
{ Name = name; Bark = cat.Bark >> (fun a -> a + " " + a)}
let dog = newDog "Pochi"
let cat = newCat "Tama"
let cheetah = newCheetah "Hana"
[dog; cat; cheetah]
|> List.iter (fun animal -> printfn "%A:%A" animal.Name (animal.Bark ()))
// "Pochi":"Bow wow"
// "Tama":"meow"
// "Hana":"meow meow"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment