I create this gist to summarize my understanding on tagless final that I read in the article A "quick" introduction to Tagless Final.
The first word "Tagless" makes reference to the return types that are not tagged or grouped using GADT, ADT or union types, Int | String
. Yet. the return types can be "anything".
Initial encoding uses ADT etc. to encode the expressions, Then use an interpretor to evaluate the expressions. On the other hand, final encoding uses functions to model the expression. With functions, tags and interpretors are not required.