You have not yet used GenServers? They do it very similar to this…
Just to underline this point: example
The Demo module is the callback module. None of the usual behaviour ceremony is actually necessary - other than implementing the mandatory callback functions.
{:ok, pid} = GenServer.start_link(Demo,[])
The Demo callback module is composed with the GenServer behaviour module leading to a GenServer based process with the specialized Demo functionality.
In OO:
parse!/1would be a method on the abstract class. It may have some generic logic but doesn’t do the actual work. It would call a hook methoddo_parse/1that is left for the subclass to implement the content specific parsing.- The subclass overides
do_parse/1implementing the content specific implementation. You use the subclass to parse the content it is specialized for.
So:
Parser.parse!/2is the generic function in the behaviour module that will delegate the details of parsing the specific content toMyParser.MyParseris a collection of hook function implementations needed to parse the specific content (organized as a callback module).




















