/Prelude-v21.1.0/NonEmpty/unzip.dhall

Copy path to clipboard

Unzip a NonEmpty list into two separate NonEmpty lists

Examples

  unzip
Text
Bool
{ head = { _1 = "ABC", _2 = True }
, tail = [ { _1 = "DEF", _2 = False }, { _1 = "GHI", _2 = True } ]
}
≡ { _1 = { head = "ABC", tail = [ "DEF", "GHI" ] }
, _2 = { head = True, tail = [ False, True ] }
}
  unzip
Text
Bool
{ head = { _1 = "ABC", _2 = True }
, tail = [] : List { _1 : Text, _2 : Bool }
}
≡ { _1 = { head = "ABC", tail = [] : List Text }
, _2 = { head = True, tail = [] : List Bool }
}

Source

--| Unzip a `NonEmpty` list into two separate `NonEmpty` lists
let NonEmpty =
./Type.dhall sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
? ./Type.dhall

let NonEmpty/map =
./map.dhall sha256:93d53afe874bb2eed946c21ca5ada3c9716b7d00e6d8edfaba6484cd9c5a00bd
? ./map.dhall

let unzip
: ∀(a : Type) →
∀(b : Type) →
NonEmpty { _1 : a, _2 : b } →
{ _1 : NonEmpty a, _2 : NonEmpty b }
= λ(a : Type) →
λ(b : Type) →
λ(xs : NonEmpty { _1 : a, _2 : b }) →
{ _1 =
NonEmpty/map
{ _1 : a, _2 : b }
a
(λ(x : { _1 : a, _2 : b }) → x._1)
xs
, _2 =
NonEmpty/map
{ _1 : a, _2 : b }
b
(λ(x : { _1 : a, _2 : b }) → x._2)
xs
}

let example0 =
assert
: unzip
Text
Bool
{ head = { _1 = "ABC", _2 = True }
, tail = [ { _1 = "DEF", _2 = False }, { _1 = "GHI", _2 = True } ]
}
≡ { _1 = { head = "ABC", tail = [ "DEF", "GHI" ] }
, _2 = { head = True, tail = [ False, True ] }
}

let example1 =
assert
: unzip
Text
Bool
{ head = { _1 = "ABC", _2 = True }
, tail = [] : List { _1 : Text, _2 : Bool }
}
≡ { _1 = { head = "ABC", tail = [] : List Text }
, _2 = { head = True, tail = [] : List Bool }
}

in unzip