# Lifting functions with multiple return values

**URL:** <https://discourse.julialang.org/t/lifting-functions-with-multiple-return-values/103821>\
**Category:** General Usage\
**Tags:** observables\
**Created:** [September 13, 2023, 4:58pm UTC](https://discourse.julialang.org/t/lifting-functions-with-multiple-return-values/103821 "2023-09-13T16:58:58Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![mschauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mschauer/32/13946_2.png) [@mschauer](https://discourse.julialang.org/u/mschauer)\
**Post date:** [September 13, 2023, 4:58pm UTC](https://discourse.julialang.org/t/lifting-functions-with-multiple-return-values/103821/1 "2023-09-13T16:58:58Z")

</div>

I want to lift a function with multiple return values such that each return value is an observable. Below is an example which makes an observable pair, instead, as I wish, a pair of observables.

```julia
julia> z = Observable(3 + 4im)
Observable(3 + 4im)

julia> @lift reim($z)
Observable((3, 4))

```

---

<div class="post-metadata">

**Author:** ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)\
**Post date:** [September 13, 2023, 9:33pm UTC](https://discourse.julialang.org/t/lifting-functions-with-multiple-return-values/103821/2 "2023-09-13T21:33:46Z")

</div>

Perhaps not really an answer to what is the correct library implementation. But as a workaround, something like:

```julia
splitobs(o::Observable{Tuple{}}) = ()
splitobs(o::Observable{<:Tuple}) = (lift(first, o), splitobs(lift(Base.tail, o))...)

```

might work:

```julia
julia> rpart, ipart = splitobs(@lift reim($z))
(Observable(3), Observable(4))

```
