This document discusses using a tagless final embedded domain specific language (eDSL) approach to build a functional API for the imperative WebGL graphics library. It describes wrapping WebGL calls in IO as one solution but notes issues with separation of concerns and testing. The document then introduces tagless final as a way to define algebras that model WebGL operations and can have multiple interpreters. It provides examples of defining console, key-value store, and prompt algebras and combining them. The document concludes that tagless final allows defining interactions through algebras that can be composed, layered and have multiple interpreters for flexibility and testability while working at an extra level of abstraction.