Haskell design patterns differ from mainstream design patterns in one important way: Conventional architecture: Combine a several components together of type A to generate a "network" or "topology" of type B Haskell architecture: Combine several components together of type A to generate a new component of the same type A, indistinguishable in character from its substituent parts This distinction a