Skip to content

Instantly share code, notes, and snippets.

@nicolasboulay
Last active October 11, 2017 14:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicolasboulay/a8ee4a65e8c2cc110c20e6d24e838e86 to your computer and use it in GitHub Desktop.
Save nicolasboulay/a8ee4a65e8c2cc110c20e6d24e838e86 to your computer and use it in GitHub Desktop.
Sum type not always the best choice
When you came from the Ocaml world, tree and AST are easly done with a sum type. The sum type have the very nice feature of
not compiling if a case is missing, wich is super nice for code refactoring.
But a new kind of technique that only use module and function exist, it's called tagless final. Module are kind of golang package
with parameters. It's look like mother class but with types as parameters.
So you use simple function call to describe an ast, then you could interpret it the way you want. Typical examples are
type checking, pretty print and execution.
I don't think it's possible to do it in Golang with interface and struct because of the lack of type as parameter.
Maybe if a package could be created at compile time with some parameter, the technique became possible.
[ENG] http://okmij.org/ftp/tagless-final/index.html
[fr] https://linuxfr.org/users/kantien/journaux/tagless-final-ou-l-art-de-l-interpretation-modulaire
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment