Skip to content

Instantly share code, notes, and snippets.

@robotlolita
Last active December 26, 2015 15:09
Show Gist options
  • Save robotlolita/7171010 to your computer and use it in GitHub Desktop.
Save robotlolita/7171010 to your computer and use it in GitHub Desktop.
OO as structurally typed polymorphic records in Elm
type Named a = { a | name: String }
type Greeter a = { a | greet: (String -> String) }
bob = { name = "Bob", age = 12 }
alice = { name = "Alice", age = 19, gender = "F" }
makeGreeterFromString: String -> Greeter {}
makeGreeterFromString name = { greet = \how -> how ++ ", " ++ name }
makeGreeterFromNamed: Named a -> Greeter (Named a)
makeGreeterFromNamed person = { person | greet = \how -> how ++ " " ++ person.name }
g' = makeGreeterFromString bob.name
g'' = makeGreeterFromNamed alice
main = flow down <| map asText [ g'.greet "Hello"
, g''.greet "Hi"
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment