30 lines
857 B
Text
30 lines
857 B
Text
--| Unzip an `Optional` value into two separate `Optional` values
|
|
let unzip
|
|
: ∀(a : Type) →
|
|
∀(b : Type) →
|
|
Optional { _1 : a, _2 : b } →
|
|
{ _1 : Optional a, _2 : Optional b }
|
|
= λ(a : Type) →
|
|
λ(b : Type) →
|
|
λ(xs : Optional { _1 : a, _2 : b }) →
|
|
{ _1 =
|
|
merge
|
|
{ Some = λ(x : { _1 : a, _2 : b }) → Some x._1, None = None a }
|
|
xs
|
|
, _2 =
|
|
merge
|
|
{ Some = λ(x : { _1 : a, _2 : b }) → Some x._2, None = None b }
|
|
xs
|
|
}
|
|
|
|
let example0 =
|
|
assert
|
|
: unzip Text Bool (Some { _1 = "ABC", _2 = True })
|
|
≡ { _1 = Some "ABC", _2 = Some True }
|
|
|
|
let example1 =
|
|
assert
|
|
: unzip Text Bool (None { _1 : Text, _2 : Bool })
|
|
≡ { _1 = None Text, _2 = None Bool }
|
|
|
|
in unzip
|