Generics <i>solve</i> an occurrence of too much entanglement. That is, it solves entanglement of an abstract &quot;shape&quot; of computation with a specific set of type definitions. Generics actually allow you to <i>not</i> think about an additional dimension of your program (i.e. the exact types a computation or data type can be used with).<p>Haskell programmers famously point this out with the observation that a generic fmap is <i>safer</i> than one that has knowledge of the concrete types it uses. The type signature of fmap is this:<p>fmap :: Functor f =&gt; (a -&gt; b) -&gt; f a -&gt; f b<p>In practice, what this means is that you can be assured that your fmap implementation can <i>only</i> apply the passed function over the value(s) wrapped in the functor, because of the fact that it cannot have visibility into what types it will operate on.<p>In golang, because of a lack of generics, you can write a well-typed fmap function, but it will inherently be coupled with the type of the slice it maps over. It also means the author of such a function has knowledge of all the properties involved in the argument and return type of the function passed, which means the writer of an fmap can do all kinds of things with that data that you have no assurances over.