Together with C++20 came a new language functionality — concepts. Although the creators deny that concepts are an analog of type classes, nevertheless, some hierarchies of concepts are very similar to those in Haskell. Concepts are a new tool and practices for its use have yet to be developed. Concepts are expected to change the style of C++ development itself, as you can see by the practice of using type classes in Haskell. But what else can be done with the help of concepts, what ideas are worth considering?
In this talk we will implement a design approach from Haskell, better known as Final Tagless. We will look at what it is and how Final Tagless can be expressed using concepts. We will build the simple eDSL on FT and discuss its properties.