mirror of
https://github.com/idris-lang/Idris2.git
synced 2024-12-24 12:14:26 +03:00
58 lines
1.9 KiB
Idris
58 lines
1.9 KiB
Idris
module Data.Zippable
|
|
|
|
%default total
|
|
|
|
---------------------------
|
|
-- Zips and unzips --
|
|
---------------------------
|
|
|
|
||| The `Zippable` interface describes how you can combine and split the
|
|
||| elements in a parameterised type.
|
|
||| @ z the parameterised type
|
|
public export
|
|
interface Zippable z where
|
|
||| Combine two parameterised types by applying a function.
|
|
||| @ z the parameterised type
|
|
||| @ func the function to combine elements with
|
|
zipWith : (func : a -> b -> c) -> z a -> z b -> z c
|
|
|
|
||| Combine two parameterised types into a parameterised type of pairs.
|
|
||| @ z the parameterised type
|
|
zip : z a -> z b -> z (a, b)
|
|
zip = zipWith (,)
|
|
|
|
infixr 6 `zip`
|
|
|
|
||| Combine three parameterised types by applying a function.
|
|
||| @ z the parameterised type
|
|
||| @ func the function to combine elements with
|
|
zipWith3 : (func : a -> b -> c -> d) -> z a -> z b -> z c -> z d
|
|
|
|
||| Combine three parameterised types into a parameterised type of triplets.
|
|
||| @ z the parameterised type
|
|
zip3 : z a -> z b -> z c -> z (a, b, c)
|
|
zip3 = zipWith3 (,,)
|
|
|
|
||| Split a parameterised type by applying a function into a pair of
|
|
||| parameterised types.
|
|
||| @ z the parameterised type
|
|
||| @ func the function to split elements with
|
|
unzipWith : (func : a -> (b, c)) -> z a -> (z b, z c)
|
|
|
|
||| Split a parameterised type of pairs into a pair of parameterised types.
|
|
||| @ z the parameterised type
|
|
unzip : z (a, b) -> (z a, z b)
|
|
unzip = unzipWith id
|
|
|
|
||| Split a parameterised type by applying a function into a triplet of
|
|
||| parameterised types.
|
|
||| @ z the parameterised type
|
|
||| @ func the function to split elements with
|
|
unzipWith3 : (func : a -> (b, c, d)) -> z a -> (z b, z c, z d)
|
|
|
|
||| Split a parameterised type of triplets into a triplet of parameterised
|
|
||| types.
|
|
||| @ z the parameterised type
|
|
unzip3 : z (a, b, c) -> (z a, z b, z c)
|
|
unzip3 = unzipWith3 id
|