Information Hiding (in types too) ▸ OOP handles Heterogeneity ▸Parametric Polymorphism is compile-time ▸Fundamentally changes behaviour based on plugged-in types
Unfamiliarity for users ▸Not all needed type-classes are available, design can be frustrating https://github.com/typelevel/cats/pull/1552 (39 comments and counting)
▸ Describe State Machines ▸ Be lazy, suspend side-effects with Task/Free/IO ▸ Be lawful, use ScalaCheck/QuickCheck ▸ Performance matters (for libraries)