Showcase of exhaustive pattern matching and tagged unions in Go
I come from functional programming background (Haskell, OCaml, etc.), so I missed exhaustive pattern matching and tagged unions in Go. So I’ve been wondering how to implement them.
Luckly, it’s a possible task. You don’t need reflection or generics for that. It’s not a lot of code, simple stuff.
This module shows one of the ways to implement and use these things in Go. This is not a library, it’s a pattern.
Note: this pattern should not be used in performance sensitive code.
- No reflection or generics used.
- Not too much boilerplate required, implementation is easy to understand.
- Type safe.
isf.T is a tagged union, which holds an int, a string or a float.
isf.Match is used for pattern matching. It receives a
isf.T and a handler for each of the possible cases.
main.go has an example how this should be used, check it out.
I’m open for suggestions on how to improve this 🙂
Add more examples. Add an example of a simple enum. Add an example of a more complicated tagged union (e.g. a binary tree). Figure out how to generate implementation boilerplate programmatically.