")

map(users, _.name)
// res17: List[String] = List("John", "Eda", "Bob")
```

---
# All generic types are not data structure

<br>
<br>

```scala mdoc:invisible
type Json = String
```

```scala mdoc:silent
trait JsonDecoder[A]{
  def decode(value: Json): A
}


case class Predicate[A](value: A => Boolean)
```

---
class: white

background-image: url(../img/fp-tower/website-background.svg)

<br><br>

# .white[Summary]

<br>

.medium[
* Generic functions reduce code duplication

* We can have several type pa