In Haskell there is CT creating an algebra. In CL there is the management of nil that resembles a smart algebra, effective for many examples of CL code:
• and, or and other functions working on booleans are extremely composable, because they recognize when something fail.