I have a pattern cropping up often. I have a structure like this one:

```
data Foo = Foo
  { foo  :: Maybe Text
  , bar  :: Maybe Text
  , buz  :: Maybe Text
  }

```

I want to convert it to a map with labels-values, discarding Nothing values:

```
myMap :: [(Text, Text)]

```

for example: `myMap = [("foo", "val1"), ("bar", "val2")]`

What is the most elegant way to do that?
I have tried with patterns such as `if isJust ... then fromJust ... else Nothing` and then use `catMaybes` but it's not very elegant IMO.

In practice my structure is more heterogeneous:

```
data Foo = Foo
  { foo  :: Maybe Text
  , bar  :: Maybe Bool
  , buz  :: Maybe Int
  }

```

And I want to convert it to:

```
myMap :: [(Text, Value)]

```

Is there a Lens way for this?