Kategori teorisi ve soyut cebir, fonksiyonların diğer fonksiyonlarla birleştirilme biçimini ele alır. Karmaşıklık teorisi, bir fonksiyonun hesaplanmasının ne kadar zor olduğu ile ilgilenir. Böyle doğal çiftler gibi göründüklerinden, bu çalışma alanlarını kimsenin birleştirmediğini görmek garip. Bunu daha önce kimse yaptı mı?
Motive edici bir örnek olarak, monoidlere bir göz atalım. Bir operasyonun bir monoid olması durumunda, operasyonu paralel hale getirebileceğimiz iyi bilinmektedir.
Örneğin Haskell'de, eklemenin şu gibi tamsayılara göre bir monoid olduğunu önemsiz bir şekilde tanımlayabiliriz:
instance Monoid Int where
mempty = 0
mappend = (+)
Şimdi, 0 ile 999 arasında bir toplam hesaplamak istiyorsak, bunu sırasıyla yapabiliriz:
foldl1' (+) [0..999]
ya da paralel olarak yapabiliriz
mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel
Ancak bu monoid'e paralel hale getirmek, yalnızca mappend sabit zamanda çalıştığı için anlamlıdır. Ya durum böyle olmasaydı? Örneğin listeler, mappend'in tutarsız zaman (veya boşluk!) Çalıştırmadığı monoidlerdir. Haskell'de varsayılan paralel mconcat işlevi olmamasının sebebi budur. En iyi uygulama, monoidin karmaşıklığına bağlıdır.
Bu iki monoid arasındaki farkları tanımlamak için uygun bir yol olması gerektiği anlaşılıyor. Daha sonra kodumuza bu farklılıklarla açıklama ekleyebilmeliyiz ve programların bir monoidin karmaşıklığına bağlı olarak kullanılacak en iyi algoritmaları otomatik olarak seçmesini sağlamalıyız.